Да, вы ищете ReDim
заявление, которое динамически распределяет необходимое количество пространства в массиве.
следующее заявление
Dim MyArray()
объявляет массив без размеров, так что компилятор не знает, насколько она велика и не может ничего внутри него хранить.
Но вы можете использовать ReDim
заявление, чтобы изменить размер массива:
ReDim MyArray(0 To 3)
И если вам необходимо изменить размер массива, а сохраняя его содержимое, вы можете использовать Preserve
ключевое слово вместе с ReDim
заявление:
ReDim Preserve MyArray(0 To 3)
Но обратите внимание, что оба ReDim
и особенно ReDim Preserve
имеют значительные издержки производительности. Старайтесь избегать этого снова и снова в петле, если это вообще возможно; ваши пользователи будут вам благодарны.
Однако в простом примере, показанном на ваш вопрос (если это не просто холостой образец), вам не нужно ReDim
вообще. Просто объявите массив с явными размерами:
Dim MyArray(0 To 3)
Зачем вам это делать * в цикле? 'ReDim', и особенно когда вы добавляете' Preserve', является потенциальным убийцей производительности. Вы знаете, сколько раз цикл будет итерации, поэтому определенно сделайте это за пределами цикла. Затем вы только изменяете размер массива один раз, и вам не нужен «Preserve». –
@CodyGray Вы абсолютно правы, если окончательный размер массива уже определен при вводе цикла. Помещение Redim внутри цикла будет убийцей производительности. Однако я предположил, что размер массива не определяется при входе в цикл. В противном случае весь образец не имеет никакого смысла ... – Fluffi1974
Он должен иметь *, определяемый при вводе цикла. Вы должны определить диапазон цикла. Даже если это переменная, а не константа, как '3', вы все еще указываете верхнюю границу в инструкции' For'. Используйте это, чтобы динамически инициализировать размер массива. –