Массивы

Массивы используются для хранения в памяти множества значений. Вместо того чтобы объявлять множество похожих друг на друга переменных, часто гораздо удобнее воспользоваться массивом. Объявление массива производится очень просто:

Dim MyArray(2) As Integer

Здесь 2 — это верхняя граница массива (upper bound). По умолчанию нижней границе массива (lower bound) соответствует элемент с номером 0. Количесво элементов, которое может хранить массив, — от 0 до верхней границы включительно. Наш массив может хранить три целочисленных элемента.

Если вам хочется, чтобы нижняя граница массива (и, соответственно, нумерация элементов) начиналась с 1, то в раздел объявлений модуля нужно внести команду:

Option Base 1

В принципе, тип данных для массива можно не объявлять:

Dim MyArray(2)

В этом случае для элементов массива будет использован тип Variant. Такой массив сможет хранить в себе элементы разных типов данных, но требования к памяти у него будут выше и работать он будет чуть медленнее по сравнению с массивом, для которого тип данных указан явно (например, Integer или String).

Присвоить значение отдельному элементу массива (в нашем случае - первому) можно очень просто:

MyArray(0) = 100

А затем это значение можно будет извлечь:

MsgBox MyArray(0)

Массивы могут быть многомерными, в частности, двумерными:

Dim MyArray(4, 9)

В каждой строке многомерного массива удобно хранить данные, относящиеся к одному объекту (например, имя сотрудника, уникальный номер, номер телефона). В VBScript в одном многомерном массиве может быть до 60 измерений.

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

Dim MyArray() ' объявляем массив без верхней границы

ReDim MyArray(4) ' изменяем размер массива

Команда ReDim не только изменяет размер массива, но и удаляет из него все старые значения. Чтобы старые значения сохранились, используется ключевое слово Preserve:

ReDim Preserve MyArray(7)

Однако если новый размер массива меньше, чем количество помещенных в него элементов, слово Preserve не поможет - часть данных все равно будет потеряна.

Массивы можно создавать и заполнять одновременно:

Dim MyArray

MyArray = Array(100, 200, 300, 400, 500)

Указывать размер массива необязательно - он будет автоматически настроен в соответствии с количеством передаваемых элементов.

Очистить массив можно командой Erase:

Erase MyArray

Массив фиксированной длины просто очищается, динамический массив разинициализируется - его придется инициализировать (определять размер) заново.

В динамических массивах часто не известно, сколько элементов в массиве. Для определения количества элементов используется функция UBound() (если массив одномерный или вас интересует размер первого измерения, то измерение передавать не надо):

UBound(имя_Массива [, измерение])

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

Например, в Word предусмотрена коллекция Documents для хранения элементов Document, т. е. всех открытых документов, в Excel - коллекции Workbooks (открытые книги) и Worksheets (листы в книге) и т. п.

Коллекции обычно удобнее, чем массивы: они изначально безразмерны и в них предусмотрен стандартный набор свойств и методов (метод Add() для добавления нового элемента, свойство Count для получения информации о количестве элементов, метод Item() для получения ссылки на нужный элемент). Для многих коллекций в объектных моделях кроме стандартных предусмотрен еще и набор специфических свойств и методов.