如何在 VBA 中重新保留锯齿状数组(数组中的数组)?

how to redim preserve jagged array (arrays in array) in VBA?

我在 EXCEL VBA 中有一个数组数组(不是二维数组),我需要向内部数组添加元素。 例如:

Option Explicit

Sub ArrayofArrays()

Dim OuterArray() As Variant
ReDim OuterArray(0 To 0)

Dim InnerArray() As Variant
ReDim InnerArray(0 To 0)

InnerArray(0) = "Foo"
OuterArray(0) = InnerArray

ReDim Preserve OuterArray(LBound(OuterArray) To UBound(OuterArray) + 1)
End Sub

我现在可以通过以下方式访问内部元素:

debug.print OuterArray(0)(0)

打印我 "Foo"

但是如何扩展 OuterArray 中的数组?

最后一行只向 OuterArray 添加了一个空元素:

ReDim Preserve OuterArray(LBound(OuterArray) To UBound(OuterArray) + 1)

但我想要的是:

¦___OuterArray(0)

¦_____________OuterArray(0)(0): "Foo"

¦_____________OuterArray(0)(1): "Bar"

谢谢!

VBA 不允许您直接 ReDim 内部数组,但是,您可以通过使用中间辅助数组(在此示例中名为 tmp)很容易地实现它

Option Explicit
Sub ArrayofArrays()
    Dim tmp As Variant
    Dim OuterArray() As Variant
    ReDim OuterArray(0 To 0)

    Dim InnerArray() As Variant
    ReDim InnerArray(0 To 0)

    InnerArray(0) = "Foo"
    OuterArray(0) = InnerArray

    tmp = OuterArray(0)
    ReDim Preserve tmp(LBound(tmp) To UBound(tmp) + 1)
    OuterArray(0) = tmp
    Erase tmp

    OuterArray(0)(1) = "Bar"
    Debug.Print OuterArray(0)(1)
End Sub