Arrays VBA:使用字典将多行字符串拆分为列表

Arrays VBA:使用字典将多行字符串拆分为列表,arrays,vba,dictionary,Arrays,Vba,Dictionary,大家好 我有以下问题:我有一个多行字符串,想用字典将其拆分成一个列表 例如,我有以下字符串: input = "Bla Bla2 Bla3" & vbLf & "Bla21 Bla22 Bla23" 我想把它分割成一个数组,其中每个条目包含一行(即,第一条条目第一行,依此类推)。条目本身应该是字典,其中每一列(以“”分隔的单词)都由一个单词定义 例如,这里有“col1”、“col2”和“col3” 结果应该是一个包含2个元素的列表,每个元素应该是一个字典,其中d(“col1”)

大家好

我有以下问题:我有一个多行字符串,想用字典将其拆分成一个列表

例如,我有以下字符串:

input = "Bla Bla2 Bla3" & vbLf & "Bla21 Bla22 Bla23"
我想把它分割成一个数组,其中每个条目包含一行(即,第一条条目第一行,依此类推)。条目本身应该是字典,其中每一列(以“”分隔的单词)都由一个单词定义

例如,这里有“col1”、“col2”和“col3”

结果应该是一个包含2个元素的列表,每个元素应该是一个字典,其中d(“col1”)包含第一个条目的“Bla”,第二个条目的“Bla21”

通过拆分输入,我能够拆分字符串并将第一列馈送到最终数组中

    ar = Split(input,vbLf,,vbTextCompare)
    pos = 0
然后在该数组上进行交互-向结果数组动态添加条目

    Do while pos < UBound(ar)
       line = Split(ar(pos))
       if Len(Join(result)) = 0 Then
           ReDim Preserve result(0)
       else
           ReDim Preserve result(Ubound(result)+1)
       result(Ubound(result)) = line(0)
       pos = pos + 1
   Loop
并在if子句的正下方设置值

 d("col1") = line(0)
 d("col2") = line(1)
 d("col3") = line(2)
最后,我想将数组元素设置为这个字典:

result(Ubound(result)) = d
然而,这是行不通的。像这样运行时,我会得到一个“参数非可选”错误。添加集合时,即:

Set result(Ubound(result)) = d
我得到一个“需要对象”错误

有人能帮我纠正这个错误吗

谢谢你和亲切的问候

/编辑:为了让生活更轻松,这里是我目前使用的实际功能:

Function IterateString(text as String)
      Dim pos as Integer
      Dim entry() as String
      Dim line() as String
      Dim result() as String
      Dim MyDict as Scripting.Dictionary

      entry = Split(text,vbLf,,vbTextCompare)
      pos = 0
      result = Array()

      Do While pos < Ubound(entry)
        If Trim$(entry(pos)) <> "" Then
           line = Split(entry(pos))
           Set MyDict = New Scripting.Dictionary
           If Len(Join(result)) = 0 Then
              ReDim result(0,0)
           Else
              ReDim Preserve result(UBound(result,1) + 1)
           End If
           MyDict.Add "col1",line(0)
           MyDict.Add "col2",line(1)
           Set result(Ubound(result,1)) = MyDict
        End If
        pos = pos + 1
     Loop
     IterateString = result
End Function
函数迭代字符串(文本为字符串)
作为整数的Dim pos
Dim entry()作为字符串
作为字符串的Dim line()
Dim result()作为字符串
将MyDict设置为脚本.Dictionary
条目=拆分(文本、vbLf、vbTextCompare)
pos=0
结果=数组()
当pos
哪里定义了
结果
?你的字典只限于每一行吗?那么这些线本身就是数组元素。所以类似于ar(N)(“Col 3”)的东西是可以接受的?结果在最顶端定义(就像pos、line和ar)-pos为整数,line()为字符串,result()为字符串是字典应该限制在每一行-因此每一行都包含自己的字典-并且ar(N)(“Col 3”)目前应该可以接受,仅将字典设置为与列表项相等是不起作用的-其余部分似乎正常,但结果从未被分配值..目前没有任何PC分配值,因此一个盲点:尝试“Dim result()As dictionary”以及“Set result(Ubound(result))=d”谢谢你-我真的不明白为什么我需要这个-但我现在知道了,它可以工作了-谢谢:)
Function IterateString(text as String)
      Dim pos as Integer
      Dim entry() as String
      Dim line() as String
      Dim result() as String
      Dim MyDict as Scripting.Dictionary

      entry = Split(text,vbLf,,vbTextCompare)
      pos = 0
      result = Array()

      Do While pos < Ubound(entry)
        If Trim$(entry(pos)) <> "" Then
           line = Split(entry(pos))
           Set MyDict = New Scripting.Dictionary
           If Len(Join(result)) = 0 Then
              ReDim result(0,0)
           Else
              ReDim Preserve result(UBound(result,1) + 1)
           End If
           MyDict.Add "col1",line(0)
           MyDict.Add "col2",line(1)
           Set result(Ubound(result,1)) = MyDict
        End If
        pos = pos + 1
     Loop
     IterateString = result
End Function