Динамическое измерение массива VBA? - PullRequest
22 голосов
/ 01 декабря 2010

Почему я не могу установить размер массива на основе переменной?Какой лучший способ обойти это?

Dim NumberOfZombies as integer
NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) as New Zombie

Ответы [ 4 ]

42 голосов
/ 01 декабря 2010

Вы можете использовать динамический массив , когда вы не знаете, сколько значений он будет содержать до времени выполнения:

Dim Zombies() As Integer
ReDim Zombies(NumberOfZombies)

Или вы можете делать все с одним операторомесли вы создаете массив, локальный для процедуры:

ReDim Zombies(NumberOfZombies) As Integer

Массивы фиксированного размера требуют, чтобы количество содержащихся элементов было известно во время компиляции.Вот почему вы не можете использовать переменную для установки размера массива - по определению, значения переменной являются переменными и известны только во время выполнения.

Вы можете использовать константу, если знаетезначение переменной не должно было изменяться:

Const NumberOfZombies = 2000

, но нет никакого способа преобразования между константами и переменными.Они имеют совершенно разные значения.

3 голосов
/ 01 декабря 2010

Вы должны использовать оператор ReDim для динамического размера массивов.

Public Sub Test()
    Dim NumberOfZombies As Integer
    NumberOfZombies = 20000
    Dim Zombies() As New Zombie
    ReDim Zombies(NumberOfZombies)

End Sub

Это может показаться странным, когда вы уже знаете размер массива, но все готово!

2 голосов
/ 01 декабря 2010

Вы также можете изучить использование объекта Collection. Обычно это работает лучше, чем массив для пользовательских объектов, поскольку он динамически изменяет размеры и имеет методы для:

  • Добавить
  • Count
  • Удалить
  • Item (индекс)

Кроме того, обычно проще проходить по коллекции, поскольку вы можете очень легко использовать для ... каждую структуру с коллекцией.

1 голос
/ 01 декабря 2010

Вам нужно использовать константу.

CONST NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) As Zombies

или если вы хотите использовать переменную, вы должны сделать это следующим образом:

Dim NumberOfZombies As Integer
NumberOfZombies = 20000

Dim Zombies() As Zombies

ReDim Zombies(NumberOfZombies)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...