Для хранения ссылок на объекты используется тип данных Object. Каждая переменная данного типа требует 4 байта.
При разработке программ в среде VBA в зависимости от типа данных переменных рекомендуется использовать префиксы, приведенные в таблице 2.1
Таблица 2.1 – Префиксы, используемые в наименованиях переменных
Тип данных | Префикс | Пример |
Boolean | bin | binSuc |
Byte | byt | bytImege |
Currency | cur | curPrn |
Date | dtm | dtmFinish |
Double | dbl | dblSum |
Integer | int | intKol |
Long | Ing | IngLoop |
Single | sng | sngTotal |
String | str | strLast |
Variant | vnt | vntValui |
2.2 Описание переменных
Термины время жизни и область видимости переменной означают место использования переменной в приложении, а также время существования переменной после ее создания.
Область видимости переменной определяет часть кода, которая «знает» о существовании данной переменной. При определении переменной в процедуре получить или изменить ее значение можно только из кода этой процедуры. Иногда, однако, необходимо использовать переменную с более обширной областью видимости. Например, переменную, значения которой доступны для всех процедур модуля или проекта. Существуют три типа области видимости переменной:
- переменные уровня процедуры распознаются только в процедуре, в которой они описаны. Они описываются при помощи инструкций Dim или Static. Такие переменные называются локальными;
- переменные уровня модуля используются только в модуле, в котором они описаны, но не в других модулях данного проекта. Описываются при помощи оператора Dim или Private в области описания модуля, т.е. перед описанием процедур;
- переменные уровня модуля, описанные при помощи инструкции Public, являются доступными для всех процедур проекта. Такие переменные называются открытыми.
Закрытая (Private) переменная сохраняет свое значение, только пока выполняется процедура, в которой эта переменная описана. При завершении процедуры значение переменной теряется, и при повторном запуске процедуры его надо заново инициализировать. Переменные, описанные оператором Static, сохраняют свое значение по выходу из процедуры, пока работает программа.
Для обязательного объявления всех переменных в начале модуля, в так называемой области модуля General Declarations, надо поместить директиву Option Explicit. Использование этой директивы не допускает возможности неправильного ввода имени переменной, которая применяется в одной или не - скольких процедурах модуля. Например, если переменная была объявлена как Ставка, а в коде при наборе вместо русской буквы с была использована латинская буква с, то это приведет к ошибке. В отсутствие директивы Option Explicit подобную ошибку было бы трудно отследить.
2.3 Описание массивов
Как и в других языках программирования, в VBA можно использовать массивы. Массив, как и любую переменную, надо объявлять, используя операторы Dim, Static, Private и Public, которые также задают область видимости переменной. В массиве допускается описание до 60 размерностей. При определении размерности надо указывать верхнюю, а также нижнюю границу. Если нижний индекс не задан явно, нижняя граница массива определяется директивой Option Base. Если отсутствует директива Option Base, нижняя граница массива равняется нулю. Например, в следующем операторе объявляется одномерный массив (вектор) из 12 целых чисел, причем по умолчанию первый элемент массива – А (0), а последний – А (11). В этом случае говоря, что 0 – базовый индекс.
Dim А (11) As Integer
Данный же оператор объявляет двухмерный массив 3´3 (матрицу), состоящий из действительных чисел.
Dim B (2, 2) As Single
Можно изменить базовый индекс, написав в области объявлений модуля директиву Option Base 1. После этого индексы массивов А и В будут начинаться с единицы. Например, в следующем операторе объявляется вектор, состоящий из 11 элементов.
Option Base 1
Dim A (11) As Integer
Другим способом изменения базового индекса является использование ключевого слова То при объявлении массива.
Dim B (1 To 3, 1 To 3) As Single
Dim A (1 To 12) As Integer
Инициализацию элементов массива можно производить по-разному:
- последовательностью операторов:
Dim B (1, 1) As Single
B (0, 0) = 2 : B (0, 1) = 4
B (1, 0) = 1 : B (1, 1) = 6
- оператором цикла:
Dim M (1 To 9, 1 To 9) As Integer
Dim i As Integer
Dim j As Integer
For i = 1 To 9
For j = 1 To 9
M (i, j) = i * j
Next
Next
Иногда в процессе выполнения программы требуется изменять размер массива. В этом случае первоначально массив объявляют как динамический. Для этого при объявлении массива не надо указывать размерность, например:
Dim R () As Single
Затем в программе следует вычислить необходимый размер массива в некоторой переменной, например n, и изменить размер динамического массива с помощью оператора ReDim. В следующем примере сначала объявляется динамический массив, а затем устанавливаются границы его индекса.
Dim R () As Double
ReDim R (1 To 10)
2.4 Операторы языка и управляющие конструкции
Математические операторы позволяют выполнять в программе действия над числами. В таблице 2.2 приведены арифметические операторы и выполняемые ими функции.
Таблица 2.1 – Префиксы, используемые в наименованиях переменных
Операция | Знак | Запись | Типы данных | Действие |
Сложение | + | a + b | Byte, Short, Integer, Long, Single, Double, Decimal | Складывает два числа |
Вычитание | - | a - b | Byte, Short, Integer, Long, Single, Double, Decimal | Вычитает из одного числа другое |
Деление | / | a/b | Byte, Short, Integer, Long, Single, Double, Decimal | Делит два числа и возвращает результат с плавающей точкой |
Деление нацело | \ | a\b | Byte, Short, Integer, Long, Single, Double, Decimal | Делит два числа и возвращает целый результат (остаток отбрасывается) |
Остаток | Mod | a Mod b | Byte, Short, Integer, Long, Single, Double, Decimal | Вычисляется остаток от деления одного числа на другое |
Умножение | * | а * b | Byte, Short, Integer, Long, Single, Double, Decimal | Умножает два числа |
Возведение в степень | ^ | a ^ b | Byte, Short, Integer, Long, Single, Double, Decimal | Возводит число в степень |
Математические операторы предназначены для создания выражений. Выражения могут содержать переменные, константы, функции, связанные более чем одним оператором. Если в выражении отсутствуют скобки, то операторы выполняются в следующем порядке:
- возведение в степень;
- умножение и деление;
- деление нацело;
- взятие остатка от деления;
- сложение и вычитание.
Можно изменить порядок вычисления в выражении, используя круглые скобки.
В VBA, как и во всех языках программирования, существуют управляющие конструкции, предназначенные для управления порядком выполнения команд. Различают два основных типа управляющих операторов:
- If
- Select..Case
Конструкция If используется в том случае, когда необходимо, чтобы группа операторов выполнялась при соблюдении определенных условий. Конструкция Select..Case позволяет на основании анализа значения заданного выражения выполнять те или иные действия.
В свою очередь, управляющие операторы if бывают двух видов:
- If...Then
- If...Then...Else
Конструкция If...Then применяется, когда необходимо выполнить определенные действия в зависимости от некоторого условия. Управляющая конструкция If...Then...Else используется в том случае, когда необходимо выполнить разные действия в зависимости от условия. Конструкция If.. .Then.. .Else аналогична конструкции If...Then, но позволяет задать действия, исполняемые как при выполнении условий, так и в случае их невыполнения.
Основанием для принятия решений в управляющих конструкциях являются условные выражения, поэтому предварительно необходимо сказать несколько слов об этих выражениях и работе с ними.
Условные выражения – это такие выражения, которые возвращают одно из двух значений: Истина или Ложь. В условных выражениях используют операторы сравнения, приведенные в таблице 2.3.
Таблица 2.3 – Операторы сравнения для условных выражений
Операция | Знак |
Меньше | < |
Меньше или равно | <= |
Больше | > |
Операция | Знак |
Больше или равно | >= |
Равно | = |
Не равно | <> |
Над условными выражениями можно выполнять действия логической математики (логические операции). К логическим побитовым операциям относятся операции And, Or, And Also, Or Else, Xor, Not.Операция Not имеет один операнд, остальные – по два операнда.
Ключевые слова IF и End If имеют тот же смысл, что и в конструкции If...Then. Если заданное в конструкции условие не выполняется (результат проверки равен False), и конструкция содержит ключевое слово Else, Visual Basic выполнит последовательность конструкций, расположенных следом за Else. После чего управление перейдет к конструкции, следующей после End If.
2.5 Стандартные функции работы с файлами, строками, диалоговыми окнами
В VBA имеется ряд функций и операторов по работе с файлами и каталогами. Одним из удобств является то, что не требуется устанавливать ссылку на используемую библиотеку. В таблице 2.4 эти функции и представлены.
Таблица 2.4 – Функции и операторы для работы с файлами
Функция, оператор | Назначение |
Open | Открывает файл |
Close | Закрывает все файлы |
Close # | Закрывает файл по идентификатору |
Reset | Закрывает все открытые файлы, записывает содержимое буферов. |
Print tt | Записывает данные в файл |
FileCopy | Копирует файл |
EOF | Определяет метку конца файла |
FileAttr | Возвращает режим доступа открытого файла |
FileDateTime | Возвращает дату и время создания файла |
FileLen | Возвращает размер файла в байтах |
FreeFile | Возвращает номер свободного идентификатора |
GetAttr | Получает атрибуты файла |
SetAttr | Устанавливает атрибуты файла |
Loc | Возвращает номер текущей позиции в файле |
LOF | Возвращает размер открытого файла в байтах |
Seek | Устанавливает на заданную номером позицию или запись в файле |
Dir | Возвращает содержимое текущей папки |
Kill | Удаляет файл |
Lock | Блокирует файл при работе в многопользовательской среде |
Unlock | Снимает блокировку файла в многопользовательской среде |
Name | Задает имя файла |
Get # | Читает данные из файла |
Input | Читает данные из файла |
Input # | Читает данные из файла |
Line Input # | Читает строку из файла |
Put # | Записывает данные в файл |
Write # | Записывает данные в файл |
В таблице 2.5 представлены функции обработки строковых выражений, которые позволяют произвести широкий спектр операций: от нахождения длины строки, до замены в строке подстрок.