如何使用Excel VBA将值推送到非预先指定的数组大小

Lee*_*New 6 excel vba

我正在寻求帮助,根据某些过滤器/单词匹配将XML中的值解析推入arraylist.但是,此数组不应具有预定义的数组大小,因为XML输入在文件之间是动态的.意思是,XML file1可能有10个这样的输入,XML File2可能有15个输入.有人可以建议我如何在2岁以下做:

  1. 如何定义数组列表并预先定义数组大小?当用户逐节点读取时,大小取决于XML输入列表
  2. 找到XML字匹配时,会将xml输入/值解析为Excel VBA并保留在此数组中.

chr*_*sen 15

数组可以定义为

Dim MyArray() as string
Run Code Online (Sandbox Code Playgroud)

然后在运行时调整大小并重新调整大小

Redim MyArray(lb to ub)
Run Code Online (Sandbox Code Playgroud)

或者,保留数组中的任何现有数据

Redim Preserve MyArray(lb to ub)
Run Code Online (Sandbox Code Playgroud)

lb和ub是数组的边界,并且可以通过代码确定,例如

lb = 1
ub = <number of matched found in xml>
Run Code Online (Sandbox Code Playgroud)

逐步调整大小

redim MyArray (0 to 0)
For each line in xml
    if Match then
        MyArray(ubound(MyArray)) = Match
        Redim Preserve MyArray(0 to ubound(MyArray) + 1)
    end if
Next
' Array ends up 1 size larger than number of matches '
if ubound(MyArray) > 0 then
    redim Preserve MyArray (0 to ubound(MyArray) - 1)
end if
Run Code Online (Sandbox Code Playgroud)


小智 6

虽然听起来很傻,但有时使用一个字符串可以看作是一个动态的排序数组,然后将它拆分.仅当结果数组中的对象是字符串或数字并且您可以确定char时,此方法才有效.您选择作为分隔符的序列不会出现在对象的任何字符串表示内,例如:

Temp = ""
Separator = ","
For A = 1 to 155
    If Temp <> "" Then
        Temp = Temp & Separator
    End If
    Temp = Temp & CStr(A)
Next 'A
myArray = Split(Temp, Separator)
'now myArray has the elements 1, 2, ..., 155 (which are strings!)
Run Code Online (Sandbox Code Playgroud)

这可能在某些特殊情况下有用,因为它是一种更直观的方式.请注意,您以这种方式创建的数组是一个字符串数组!