【问题标题】:how to redim preserve jagged array (arrays in array) in VBA?如何在 VBA 中重新保存锯齿状数组(数组中的数组)?
【发布时间】:2019-06-12 17:14:15
【问题描述】:

我在 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):“条形”

谢谢!

【问题讨论】:

  • 你为什么不重新调暗InnerArray
  • 您需要重新调整内部数组,给他值,然后将内部插入外部。有意义吗?
  • 你的答案和汤姆的答案一样。谢谢我使它与临时数组一起工作,然后复制到 outerArray

标签: arrays excel vba jagged-arrays


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-04-21
    • 2021-05-04
    • 2015-05-06
    • 2012-03-15
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多