Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays VBA从数组成员定义变量名_Arrays_Vba - Fatal编程技术网

Arrays VBA从数组成员定义变量名

Arrays VBA从数组成员定义变量名,arrays,vba,Arrays,Vba,早上好 我正在使用VBA,简单地说,我的问题是,我希望有一些代码,可以用数组中每个成员的名称设置一个新变量 背景: 通过读取XML文件创建的初始数组,将所有子NOE中的信息作为数组每个成员的值。比如说。如果我有一些XML,例如: <dimensions> <dimension> dim1 </dimension> <dimension> dim2 </dimension> <d

早上好

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

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

<dimensions>
   <dimension>
      dim1
   </dimension>
   <dimension>
      dim2
   </dimension>
   <dimension>
      dim3
   </dimension>
</dimensions> 
我的问题: 然后,我希望能够循环遍历我的_array()的所有成员,并生成以每个成员命名的新变量。因此,在这个简单的例子中,结果是定义了3个新变量dim1、dim2、dim3

我迄今为止的努力:

dim i as integer
for i=0 to Ubound(my_array)
   dim my_array(i) as string
next i
我希望每次循环运行时都能定义一个新变量。由于我的_数组成员的数量取决于正在读取的文件,我不知道需要定义多少变量,或者我可以预先定义它们以供以后使用

我想要的是可能的吗?我的想法是否正确

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


非常感谢

如果您不想编写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
输出如下所示:


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

如果您能够以这种方式定义变量,您以后将如何使用它们进行编码,假设您事先不知道它们的名称?我将对创建的每个变量运行相同的分析,以便知道维度列表包含在我的数组()中。我可以循环使用我的维度列表,将我的_array()的每个成员传递给不同的函数以返回结果。字典本质上是一组名称,可以在运行时定义并用作变量。您似乎知道这一点,但将其称为“以后的升级”。为什么要等待?没错,实际上XML文档比上面的示例复杂得多,每个维度都有自己的子维度。计划是创建my_array()作为所有维度的列表。然后为每个维度创建字典,该字典将包含该维度的子节点作为键,并针对每个键创建每个子节点的属性字符串。为my_数组中的每个维度生成一个字典,其中存储了有关其子节点的信息。这很可爱,但仍然会引发一些问题。我可以通过删除数组并相应地命名变量来定义一些东西吗?你可以编写VBA代码,生成另一个VBA代码,看一看,例如。因此,您可以添加新的标准模块,并为其中的所有变量编写所有声明。谢谢John,这是一个方便的小技巧。看起来我必须想出不同的解决方案来存储所有信息。
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