Основы офисного программирования и язык VBA

       

Динамические массивы


Динамические массивы VBA это мощное средство, отсутствующее в таких известных языках как, например, С++ и Паскаль. Массив считается динамическим , если при первоначальном объявлении не указывается его размерность, но она может быть определена и переопределена в последующем оператором ReDim. Размерность определяется динамически в той процедуре и в тот момент, когда она становится фактически известной. Обратите внимание, в этом операторе границы изменения индексов можно задать не только как константы, но и как выражения, зависимые от переменных.

Если затем нужно изменить границы или размерность массива, Вы можете снова задать оператор переопределения ReDim и начать новый цикл работы с массивом. И еще одна "приятность" - можно сохранить все ранее полученные элементы и расширить массив, добавив новые элементы. Для этого надо просто задать ключевое слово Preserve при переопределении массива.

Рассмотрим пример. На уровне модуля объявим глобальный динамический массив Vector:

'Объявление динамического массива Public Vector() As Integer

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

Public Sub DynArray() 'Определяется фактическая размерность массива Vector Dim N As Byte, I As Byte N = InputBox("Введите число элементов вектора") ReDim Vector(1 To N) For I = 1 To N Vector(I) = 2 * I + 1 Next I ' Массив расширяется с сохранением ранее вычисленных элементов ReDim Preserve Vector(1 To 2 * N + 1) For I = N + 1 To 2 * N + 1 Vector(I) = 2 * I Next I 'А теперь печать Debug.Print "Элементы Vector:" & Chr(13) For I = 1 To 2 * N + 1 Debug.Print Vector(I) Next I End Sub

При печати элементов этого массива будут напечатаны, как нетрудно понять вначале нечетные числа от 3 до 21, а затем четные от 22 до 42.

Динамические массивы с успехом можно применять там, где необходимы динамические структуры данных, например списки, стеки, очереди.



Содержание раздела