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

Vba 如何通过枚举值来声明(初始化)一维和二维固定大小数组?,vba,excel,Vba,Excel,我想将常量名称对存储在二维字符串数组中。我可以写: 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","fir

我想将常量名称对存储在二维字符串数组中。我可以写:

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
然后我意识到我甚至不知道如何通过即时枚举(初始化)来声明一维数组

这可能吗?如果是,如何进行


有没有关于这个问题的官方文件?(不是。)

使其更加优雅的最合理方法是创建新函数,该函数基于给定字符串创建二维数组

它可能如下所示:

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
现在,您可以这样初始化字符串数组:

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

请注意,上述功能有一些限制:

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

  • 如果给定的字符串中有任何一个包含分号,则它不起作用(除非您选择了另一个分隔符,我在上面使用了分号)


用于一维阵列

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

在VBA中,不能同时声明一个变量并初始化它(默认值除外)。@Rory根据它的说法,可以在一行中:
Dim a()作为String:a=Split(“Value1,Value2”,”,”)
这是否适用于二维数组?@Greenberet冒号只是VBA中新行的同义词。这样你就可以用冒号替换所有新行,在一行中编写整个应用程序。。我想我现在能看清楚了。我的Q的基本答案是一个相当大的否定:)不,总有一些解决办法:)谢谢。我在想我的答案,我专注于二维阵列。对于1D阵列,您的答案是正确的。唯一的问题是
array
函数创建的数组是
Variant
类型,您不能将其声明为
String
。感谢您解释数组函数的细微差别