如何通过枚举值来声明(初始化)一维和二维固定大小的数组?

我想在string的二维数组中存储常量名称对。 我可以写:

Dim a(2, 1) As String '0 to 2, and 0 to 1 a(0, 0) = "one" a(0, 1) = "first" a(1, 0) = "two" a(1, 1) = "second" a(2, 0) = "three" a(2, 1) = "third" 

但是,如果我通过查看即时给定的内容,使VBA设置数组的大小,我认为它会更优雅,更可扩展。 我想像这样的事情:

  Dim a({"one","first"}, _ {"two","second"}, _ {"three","third"}) as String 

然后我意识到我甚至不知道如何通过即时枚举(初始化)来声明一维数组。

这可能吗? 如果是的话,怎么样?

那里有关于这个Q的官方文档吗? ( 这不是)

使它更加优雅的最合理的方法是创build基于给定string创build二维数组的新函数。

它可能如下所示:

 Public Function create2DStringArray(ParamArray values() As Variant) As String() Dim varItem As Variant Dim strArray() As String Dim arraySize As Long Dim result() As String Dim iterator As Long '------------------------------------------------------------------------------------------------- On Error Resume Next arraySize = UBound(values) - LBound(values) + 1 On Error GoTo 0 ReDim result(0 To arraySize - 1, 0 To 1) For Each varItem In values strArray = VBA.Split(varItem, ";") result(iterator, 0) = strArray(0) result(iterator, 1) = strArray(1) iterator = iterator + 1 Next varItem create2DStringArray = result End Function 

现在,你可以像这样初始化你的String数组:

 Dim a() As String a = create2DStringArray("one;first", "two;second", "three;third") 

请注意,上面的function有一些限制:

  • 它最多只能使用30个参数,

  • 如果给定的string中包含分号(除非您select了另一个分隔符,我使用上面的分号),它不起作用。

对于一维数组

 Sub aArray() Dim myarray As Variant myarray = Array("One", "Two", "Three") For i = 0 To UBound(myarray, 1) Debug.Print myarray(i) Next End Sub