Jos*_*osé 5 vba multidimensional-array
是的,所以使用Python我会创建一个多维列表并在一行代码上设置值(如下所示).
aryTitle = [["Desciption", "Value"],["Description2", "Value2"]]
print(aryTitle[0,0] + aryTitle[0,1])
Run Code Online (Sandbox Code Playgroud)
我喜欢我可以在一行上设置值的方式.在VBA中,我这样做:
Dim aryTitle(0 To 1, 0 To 1) As String
aryTitle(0, 0) = "Description"
aryTitle(0, 1) = "Value"
aryTitle(1, 0) = "Description2"
aryTitle(1, 1) = "Value2"
MsgBox (aryTitle(0, 0) & aryTitle(0, 1))
Run Code Online (Sandbox Code Playgroud)
有没有办法在一行代码中设置值?
不是天生的,不是。但你可以为它编写一个函数。Python 能够做到这一点的唯一原因是有人编写了一个函数来做到这一点。不同之处在于,他们可以访问源代码,因此可以随意使用语法。您将受到 VBA 函数语法的限制。这是一个创建二维数组的函数。从技术上讲,它不是“一行代码”,但将其放入您的 MUtilities 模块中并忘记它,它会感觉就像一行代码。
Public Function FillTwoDim(ParamArray KeyValue() As Variant) As Variant
Dim aReturn() As Variant
Dim i As Long
Dim lCnt As Long
ReDim aReturn(0 To ((UBound(KeyValue) + 1) \ 2) - 1, 0 To 1)
For i = LBound(KeyValue) To UBound(KeyValue) Step 2
If i + 1 <= UBound(KeyValue) Then
aReturn(lCnt, 0) = KeyValue(i)
aReturn(lCnt, 1) = KeyValue(i + 1)
lCnt = lCnt + 1
End If
Next i
FillTwoDim = aReturn
End Function
Sub test()
Dim vaArr As Variant
Dim i As Long
Dim j As Long
vaArr = FillTwoDim("Description", "Value", "Description2", "Value2")
For i = LBound(vaArr, 1) To UBound(vaArr, 1)
For j = LBound(vaArr, 2) To UBound(vaArr, 2)
Debug.Print i, j, vaArr(i, j)
Next j
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
如果您提供奇数个参数,它会忽略最后一个。如果您使用 3 维数组,您可以为此编写一个函数。您还可以编写一个可以处理任何暗淡的奇特函数,但我不确定它是否值得。如果您使用超过 3 维的数组,您可能不需要我帮助编写函数。
上面的输出
0 0 Description
0 1 Value
1 0 Description2
1 1 Value2
Run Code Online (Sandbox Code Playgroud)