Как Redim сохранить зубчатый массив (массивы в массиве) в VBA? - PullRequest
0 голосов
/ 18 января 2019

У меня есть массив массивов (не двумерный массив) в EXCEL VBA, и мне нужно добавить элементы во внутренние массивы. e.g.:

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): «Бар»

Спасибо!

1 Ответ

0 голосов
/ 18 января 2019

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...