VBA - 在一行中设置多维数组值

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)

有没有办法在一行代码中设置值?

Dic*_*ika 3

不是天生的,不是。但你可以为它编写一个函数。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)