如何在 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
我在 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