Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Объявление переменных_VBA_форматировать.doc
Скачиваний:
26
Добавлен:
22.08.2019
Размер:
60.93 Кб
Скачать

5.3. Определение времени жизни и области видимости переменных и констант

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

Примечание: Понятие о процедурах, модулях и проектах приведены в пунктах 3.2, 3.4, 7.2, и 7.3 настоящего пособия.

Существует три типа области видимости переменной:

• переменные, которые объявлены после заголовка процедуры Sub, распознаются только в этой процедуре. Они объявляются при помощи инструкций Dim или Static. Такие переменные называются локальными;

• переменные, которые объявлены сразу после заголовка модуля, то есть перед заголовками процедур, используются во всех процедурах только этого модуля. В процедурах других модулей этого проекта они использоваться не могут. Объявляются они при помощи инструкций Dim или Private. Такие переменные называются локальными для этого модуля и глобальными для всех процедур модуля.

• переменные, которые объявлены сразу после заголовка модуля и объявлены при помощи инструкции Public, являются доступными для всех процедур проекта. Такие переменные называются открытыми или глобальными.

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

Переменные, объявленные с помощью инструкции Static, сохраняют свои значения при выходе из процедуры, пока работает программа.

5.4. Массивы. Объявление массивов

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

Объявление статического массива имеет следующий вид:

• Dim | Public | Private Имя_Массива (Индексы) As Тип_Данных

• где:

• Dim | Public | Private  ключевые слова, декларирующие массив и область его видимости;

• Имя_Массива  идентификатор, определяющий имя массива;

• Индексы  значение индекса (номера) последнего элемента в массиве по каждой размерности, считая с нулевого;

• As  ключевое слово, предваряющее указание типа элементов массива;

• Тип_Данных  любой, действительный для VBА тип данных (стандартный или созданный пользователем).

При определении размерности надо указывать верхнюю, а также нижнюю границу. Если нижний индекс не задан явно, нижняя граница массива определяется директивой Option Base. Если эта директива отсутствует, нижняя граница массива равна нулю.

Например, объявление целочисленного одномерного массива из восьми элементов может выглядеть следующим образом:

Option Base 1

Dim MyArray(8) As Integer 'Одномерный целочисленный массив из 8 элементов

или

Dim MyArray(7) As Integer 'Одномерный целочисленный массив из 8 элементов

При объявлении многомерного массива в поле индекса указывается несколько индексов в соответствии с размерностью массива. Например, двумерный строковый массив из шести столбцов и пяти строк объявляется следующим образом:

Dim strMyArray(4,5) As String 'Двумерный массив из 5 строк и 6 столбцов

При необходимости базовый индекс можно изменить путем использования ключевого слова То при объявлении массива:

Dim strMyArray (3 То 10) As String

В этом примере базовому индексу массива установлено значение 3. Подобным образом можно устанавливать как положительные, так и отрицательные базовые индексы:

Dim strMyArray (-3 То 4) As String

Объявление динамического массива отличается от объявления статического массива тем, что «Индексы» в круглых скобках отсутствуют и имеет следующий вид:

Dim | Public | Private Имя_Массива () As Тип_Данных

Количество элементов в объявленном массиве и его размерность в процессе выполнения программы можно переопределить с помощью ключевого слова ReDim. Синтаксическая конструкция переопределения массива имеет вид:

ReDim [Preserve] ИмяМассива(Индексы) [As ТипДанных],

где:

• ReDim  ключевое слово, указывающее, что переопределяются размеры массива;

• Preserve  необязательное ключевое слово, с помощью которого дается указание, чтобы все элементы переопределяемого массива сохранили свое значение;

• Индексы  размерности массива (до 60).

Например:

Dim strMyArray () As String 'Одномерный массив из 10 элементов

ReDim strMyArray (9) 'Объявление динамического массива

'(базовый индекс равен 0)

При написании программ имеется возможность узнать границы массива во время выполнения программы. Для этой цели в VBА введены две функции, формат которых имеет следующий вид:

LBound(Имя_массива [, Номер_измерения])

RBound(Имя_массива [, Номер_измерения])

Функция LBound позволяет получить нижнюю границу массива, а UBound  верхнюю. Обе функции принимают в качестве аргументов идентификатор массива и номер измерения, границу которого нужно получить. Нумерация измерений начинается с единицы. Если параметр Номер_измерения опущен, то его значение принимается равным единице. Обе функции возвращает значение типа Long.

В VBА имеется возможность быстрого заполнения массива значениями.Эта возможность реализована в функции Array. Ее формат:

Array (Список_элементов)

В качестве аргументов функция принимает список значений, разделенных запятой. Возвращает она заполненный заданными значениями массив, сохраненный в переменной типа Variant. Например:

Dim d As Variant, i As Integer

d = Array(Пн, Вт, Ср, Чт, Пт)

For i = LBound(d) To UBound(d)

MsgBox d(i)

Next i