VBA定义数组

时间:2016-02-11 11:09:28

标签: arrays vba

早上好,

我正在使用VBA,我的问题很简单,我希望有一些代码可以设置一个新变量,其中包含数组中每个成员的名称。

背景: 通过读取XML文件创建的初始数组,将所有子noes中的信息作为数组中每个成员的值。所以举个例子。如果我有一些XML,如:

<dimensions>
   <dimension>
      dim1
   </dimension>
   <dimension>
      dim2
   </dimension>
   <dimension>
      dim3
   </dimension>
</dimensions> 

我的代码到目前为止生成和数组,让我们用3个成员调用my_array():

my_array(0)=dim1
my_array(1)=dim2
my_array(2)=dim3

我的问题: 我希望能够做的是遍历my_array()的所有成员并生成以每个成员命名的新变量。因此,在这个简单的情况下,最终得到了3个新变量dim1,dim2,dim3。

到目前为止我的尝试:

dim i as integer
for i=0 to Ubound(my_array)
   dim my_array(i) as string
next i

我希望每次循环运行时都会定义一个新变量。由于my_array的成员数量取决于正在读取的文件,我不知道需要定义多少变量,或者我可以预先定义它们以供以后使用。

我想要的是什么,我是否以正确的方式思考这个问题?

下一步是,不是定义简单变量,而是每个循环都会创建一个新的字典供以后使用,但这是以后的升级。

非常感谢

1 个答案:

答案 0 :(得分:1)

如果你不想编写VBA编辑器的脚本(与使用字典相比这是一项很多的工作),但是你仍然希望自动生成大量的Dim语句供以后使用,你可以编写一个子文件。将dim语句生成为字符串,然后将它们打印到立即窗口:

Sub test()
    Dim i As Long
    Dim my_array As Variant
    Dim dims As String

    my_array = Array("dim1", "dim2", "dim3")

    For i = 0 To UBound(my_array)
        dims = dims & "Dim " & my_array(i) & " As String" & vbCrLf
    Next i
    Debug.Print dims
End Sub

输出如下:

enter image description here

您仍然需要手动复制/粘贴到编辑器中,但这可能会节省一些输入。显然,这不是一个非常强大的解决方案,但我不时地发现通过编写一个帮助子来生成重复代码是有用的,该辅助子将代码创建为字符串并将其打印到即时窗口。