Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование VBA.pdf
Скачиваний:
374
Добавлен:
03.05.2015
Размер:
3.07 Mб
Скачать

13

Dim Количество As Byte, Вес As Single

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

Тип переменной можно установить, щелкнув дважды по имени типа в этом списке.

Неявное объявление

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

для ускорения процесса отладки программы;

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

Явное объявление переменных позволяет:

увеличить скорость решения задачи;

оптимизировать распределение памяти для переменных;

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

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

2.3. Константы

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

Const <ИмяКонстанты> [As <ТипДанных>] = <Выражение>

14

где <Выражение> – это любое значение или формула, возвращающая значение, которое должно использоваться в качестве константы.

Пример

Const ПИ As Single = 3,14

Встроенные константы используются обычно при работе с объектами приложения. Эти константы не требуют предварительного объявления. Имена встроенных констант начинаются с префикса, который указывает, к объекту какого приложения Microsoft Office они относятся. Например, встроенные константы объектов Excel имеют префикс xl, встроенные константы языка VBA имеют префикс vb и т.д. Например, встроенные константы vbYes и vbNo используются в функции MsgBox, предназначенной для вывода данных на экран.

Операторы объявления переменных и констант можно размещать в любом месте программного кода, но обязательно до первого оператора,

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

2.4. Строковые переменные

Различают строки переменной и фиксированной длины. Строки переменной длины могут содержать до двух миллиардов символов; их размер заранее не определяется. Когда такой переменной присваивается значение, то размер переменной изменяется так, чтобы он соответствовал длине присвоенного строкового значения.

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

Синтаксис объявления строковой переменной следующий: Dim VarName As String [* ДлинаСтроки]

где ДлинаСтроки – целочисленная переменная или константа, содержащая число, которое указывает длину строковой переменной.

Например:

Dim strMyName As String* 20

Объявляется строковая переменная фиксированной длины в 20 символов

Dim intLen As Integer Intlen = 10

Dim MyName As String * Intlen

Объявляется строковая переменная длиной в 10 символов.

15

2.5. Массивы

представляет собой структуру, все элементы которой имеют одинаковый тип. Массивы могут быть одномерными и многомерными. Так, для отображения отдельного столбца или отдельной строки таблицы, содержащей данные одинакового типа, может быть использован одномерный массив, для отображения таблицы – двумерный, а для отображения совокупности таблиц – трёхмерный массив. Количество размерностей массива может достигать 60.

В VBA массив объявляется следующим образом:

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

где

ИмяМассива – идентификатор, определяющий имя массива; Индекс – значение номера элемента в размерности массива, зада-

ваемого одним из двух способов:

1.указанием номера последнего элемента в каждой размерности массива;

2.указанием номеров первого и последнего элемента в каждой размерности массива.

Примечание

Номера элементов (индексы) должны быть указаны целым числом.

При использовании первого метода первому элементу по умолчанию присваивается номер “ноль”. Например, объявление одномерного массива Товар из трёх элементов, каждый из которых состоит не более чем из 15 символов, по умолчанию выглядит следующим образом:

Dim Товар(2) As String*15

Для обращения к элементам массива необходимо поместить в круглых скобках за идентификатором массива целочисленное выражение, например, Товар(0), Товар(К*2) – для одномерного массива и Продажи(I,L), Продажи(3,4) ) – для двумерного массива; величины I, K, L должны быть целыми.

В приведённой ниже процедуре ОбъявлениеМассива1 Sub ОбъявлениеМассива1()

Dim Товар(2) As String*15

Товар(0) = "Стул мягкий" MsgBox Товар(0)

End Sub

выражения Товар(0), Товар(1), Товар(2) являются элементами массива;

инструкция Товар(0) = "Стул мягкий" присваивает первому элементу массива Товар значение текстовой константы "Стул мягкий";

функция MsgBox Товар(0) выводит значение этого элемента на экран:

16

Примечание

Инструкция присваивания и функция MsgBox будут подробно рассмотрены ниже.

Для изменения начала нумерации индексов массива можно поступить одним из следующих способов.

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

Option Base 1

Sub ОбъявлениеМассива2()

'

Dim Товар(3) As String * 15

Товар(1) = "Стул мягкий" MsgBox Товар(1)

'

End Sub

По умолчанию инструкция Option Base имеет значение 0 (ноль).

2.Выполнить явное указание номера первого элемента в каждой размерности массива, например,

Sub ОбъявлениеМассива3()

'

Dim Товар(1 To 3) As String * 15

Товар(1) = "Стул мягкий" MsgBox Товар(1)

'

End Sub

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

Dim Продажи(4,9) As String

или

Dim Продажи(0 To 4,0 To 9) As String

17

Примечания

1.Наличие инструкции Option Base 1 не влияет на индексацию элементов массива, если в его объявлении используется конструкция

<нижняя граница> To <верхняя граница>

Массив Продажи можно объявить так: Dim Продажи(1 To 5, 1 To 10) As String

2.Элементы массива Продажи имеют тип строковая переменная неопределённой длины.

Выше рассмотрено объявление массивов, связанных с обработкой только статических данных, т.е. таких, память под которые выделяется во время компиляции и сохраняется в течение всей работы программы.

В VBA существует другой способ выделения памяти под массивы, который называется динамическим, в котором память под массивы отводится и может быть перераспределена во время выполнения программы. Такие массивы называются динамическими.

Использование динамических величин предоставляет возможность подключать память динамически, что позволяет:

увеличить объем обрабатываемых данных;

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

определять динамически изменяющееся количество реально существующих элементов массива.

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

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

т.е. размерность динамического массива в его объявлении не указывает-

ся.

Пример

Dim Товар() As String * 15

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

ReDim [Preserve] ИмяМассива(Индексы) [As ТипДанных] Параметр Preserve используется для сохранения данных в сущест-

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

Примеры

ReDim Товар(1 To 3) As String * 15

ReDim Preserve Товар(1 To 10) As String * 15

18

При использовании параметра Preserve можно изменить размер только последней размерности, а количество размерностей изменить нельзя.

Массивы типа Variant можно создавать и заполнять одновременно при помощи встроенной функции Array(<СписокЗначений>), например:

Dim Товар As Variant

Товар = Array(“Стул”, “Стол”, “Шкаф”)

Освободить память, занимаемую элементами динамического массива, и повторно инициализировать элементы массива фиксированной длины можно инструкцией Erase:

Erase СписокМассивов

Здесь СписокМассивов – один массив или список разделенных запятыми массивов. Инициализация элементов массива фиксированной длины осуществляется следующим образом:

Тип массива

Действие инструкции Erase

Фиксированный числовой массив

Устанавливает каждый элемент

 

в нуль

Фиксированный массив строк

Устанавливает каждый элемент

(переменной длины)

на нулевую длину строки ("")

Фиксированный массив строк

Устанавливает каждый элемент

(фиксированной длины)

в нуль

Фиксированный массив типа Variant

Устанавливает каждый элемент

 

в Empty

Массив данных определенных

Устанавливает каждый элемент, как

пользователем типов

будто это отдельная переменная

Массив объектов

Устанавливает каждый элемент

 

в величину Nothing

Если количество элементов в динамическом массиве не известно, то для его определения используется функция

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

Необязательный параметр Измерение имеет тип Variant или Long. Это целое число, указывающее размерность, для которой определяется верхняя граница индекса. Для первой размерности используется число 1, для второй – 2 и т.д. если аргумент не указывается, по умолчанию используется значение 1.

Пример

Dim Товар(1 To 3) As String * 15 L=UBound (Товар)

Переменная L получит значение 3.

Функция UBound обычно используется с функцией LBound для определения размера массива, позволяющей найти наименьшее значение индекса указанной размерности. Формат функции:

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