Подтвердить что ты не робот

Динамическое измерение массива VBA?

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

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

Ответ 1

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

Dim Zombies() As Integer
ReDim Zombies(NumberOfZombies)

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

ReDim Zombies(NumberOfZombies) As Integer

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

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

Const NumberOfZombies = 2000

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

Ответ 2

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

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

End Sub

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

Ответ 3

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

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

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

Ответ 4

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

CONST NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) As Zombies

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

Dim NumberOfZombies As Integer
NumberOfZombies = 20000

Dim Zombies() As Zombies

ReDim Zombies(NumberOfZombies)