我想将常量名称对存储在二维字符串数组中。我可以写:
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 的官方文档? ( This 不是。)
最佳答案
使其更优雅的最合理方法是创建基于给定字符串创建 2D 数组的新函数。
它可能如下所示:
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")
请注意,上面的函数有一些限制:
关于vba - 如何通过枚举值来声明(初始化)一维和二维固定大小的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33255576/