Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика_4 / Использование Visual Basic for Applications / Использование Visual Basic for Applications.doc
Скачиваний:
101
Добавлен:
23.02.2015
Размер:
731.65 Кб
Скачать

5.5. Массивы

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

Dim MyArray (5 To 10) As Integer

или

Dim MyArray (10) As Integer

В данном примере объявляется одномерный массив целых чисел с именем MyArray. Граница изменения индексов массива в первом случае задается в диапазоне от 5 до 10. Во втором случае значение начального индекса то, которое принято по умолчанию, т. е. 0. Можно изменить это значение (например, на единицу), вписав в начало инструкцию Option Base 1.

Для установки конкретных значений элементам массива используется следующая конструкция: MyArray (3) = 25. После проведения такой операции значение третьего элемента массива будет равно 25, остальных – ноль (при инициализации числового массива всем его элементам присваивается нулевое значение).

Если размерность массива невозможно определить заранее, то используются динамические массивы. В момент своего объявления такой массив не содержит ни одного элемента. Объявляется динамический массив так: Dim MyArray () As Integer.

Для того чтобы использовать массив и добавлять в него элементы, необходимо использовать конструкцию: ReDim MyArray (100). Следует помнить, что при использовании инструкции ReDim все значения массива обнуляются. Для того чтобы этого не происходило, используется инструкция, выглядящая как ReDim Preserve MyArray (1000). Очевидно, в этом случае можно только увеличивать размерность массива.

Массивы могут быть не только одномерными, но и многомерными. Это означает всего лишь, что для идентификации элемента потребуется не одно, а несколько чисел. Многомерный массив (не более 60 измерений) объявляется так: Dim NewMassif (20, 30) As Single. Значение элементу присваивается такой конструкцией вида NewMassif (4, 3) = 50.57

5.6. Константы

Для повышения наглядности при описании программ вместо какого-либо постоянного значения часто используют константы. Применение констант значительно облегчает восприятие текста программы, а также упрощает отладку программы. Константы объявляются с помощью инструкции Const. В момент объявления константам присваиваются значения, которые больше уже нельзя изменить, например, Const UserPi As Single = 3.14159.

В VBA также существует множество встроенных констант, которые можно просмотреть в окне просмотра объектов. К таковым, например, относятся константы с именами False и True.

5.7. Область видимости и время жизни переменных, констант и процедур

5.7.1. Управление областью видимости

Область видимости – это участок программного кода, в котором доступны для использования переменные, константы и процедуры. Язык VBA позволяет управлять областью видимости, используя специальные ключевые слова. При объявлении переменных инструкцией Dim имя As тип внутри процедуры они будут видны, т. е. могут быть использованы только внутри этой процедуры. При каждом новом входе в процедуру переменная вновь инициализируется, при выходе из процедуры – уничтожается, при этом ее значение теряется.

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

Напишем, например, функцию для Excel, выполняющуюся каждый раз при активации листа 1 и считающую число активаций листа. Таким образом, функция должна считать количество своих вызовов.

Function OPN()

Static i

i = i + 1

OPN = i

End Function

Для того чтобы функция выполнялась каждый раз при активации листа, ее необходимо включить в обработчик события Worksheet_Activate() для данного листа, например, так:

Private Sub Worksheet_Activate()

Range("A1").FormulaR1C1 = _

"Этот лист открывается уже " & OPN & "-й раз"

End Sub

Здесь нужно уточнить, что FormulaR1C1 – это свойство выделенного диапазона из одной ячейки Range(“A1”), которое хранит в себе значение этой ячейки, текстовые строки записываются в кавычках.

Однако, если мы попробуем обратиться к счетчику за пределами функции OPN, то корректного значения не получим – переменная не видна за ее пределами. Для устранения этого недостатка переменную можно описать в модуле вне всякой функции или процедуры, если же мы еще более хотим расширить область ее видимости, то ее нужно определить с ключевым словом Public, тогда она будет доступна не только в текущем модуле, но и во всех других модулях приложения: Public имя As тип.

Существует еще одно ключевое слово – Private, которое означает, по сути, то же самое, что и ключевое слово Dim, т. е. делает переменную доступной только в текущем модуле или текущей процедуре.

Заметим, что все вышеописанное в равной степени относится как для переменных, так и для констант. Для процедур же в этом случае есть одно отличие: по умолчанию все процедуры доступны во всех модулях, т. е. объявляются как Public, для ограничения области видимости используется Private:

Private Sub Имя_процедуры (Список формальных параметров) End Sub

или

Private Function Имя_процедуры (Список формальных параметров) End Function