Учебно-методические материалы для студентов кафедры АСОИУ

Тема 2.5 Синтаксис VBA

Алфавит VBA

Алфавит языка программирования - это полный набор допустимых символов, принятых в конкретном языке для обозначения данных и действий над ними.

Алфавит языка VBA включает следующий набор символов:

В алфавит языка входят также зарезервированные слова, которые не могут быть использованы в качестве идентификаторов. Примеры зарезервированных слов: Dim, Sub, Function, If и т.д.

Типы данных

Тип данных определяет диапазон возможных значений переменной, количество памяти для ее размещения и набор допустимых операций. Базовые типы данных VBA приведены в таб. 5.

Таблица 5. Типы данных VBA

Тип данных Описание и диапазон значений
Array Массив переменных любого встроенного типа данных
Boolean True (истина) или False (ложь)
Byte Положительное число от 0 до 255
Currency Используется для денежных вычислений с фиксированным количеством десятичных знаков. От -922 337 203 685 477,5808 до 922 337 203 685 477,5807
Date Дата и время. Диапазон дат: от 01.01.0100 г. до 31.12.9999 г. Диапазон времени: от 00:00:00 до 23:59:59
Decimal Десятичное представление данных в целочисленной или вещественной форме
Double Число с плавающей точкой двойной точности. Отрицательные числа: от -1,79769313486232Е+308 до -4,94065645841247Е-324. Положительные числа: 4,94065645841247Е-324 до 1,79769313486232Е+308
Integer Целое число от -32 768 до 32 767
Long Длинное целое число от -2 147 483 648 до 2 147 483 647
Object Ссылка на объект
Single Число с плавающей точкой обычной точности. Отрицательные числа от -3,402823Е+38 до 1,401298Е-45. Положительные числа от 1,401298Е-45 до 3,402823Е+38
String (переменной длины) Длина строки от 0 до, приблизительно, 2 миллиардов символов
String (фиксированной длины) от 0 до ~65 000 символов
Variant Может использоваться для хранения любого типа данных, кроме строк фиксированной длины. Диапазон зависит от фактически сохраняемых данных.
Определяемый пользователем тип данных Используется для описания сложных данных на основе базовых типов (см. структурные типы )

Идентификаторы

В качестве идентификатора в VBA можно использовать произвольную последовательность букв и цифр длиной до 255 символов, которая обязательно должна начинаться с буквы. Эта последовательность может включать также символы подчеркивания и цифр. В качестве идентификаторов нельзя использовать зарезервированные слова языка и имена библиотечных объектов. Пробелы в идентификаторах недопустимы.

Примеры идентификаторов: SalesHistory, Counter, i, BirthDay и т.п.

Объявления

Переменные

VBA поддерживает 2 способа объявления переменных:

  1. Неявный - VBA создает переменную и резервирует память для ее хранения, когда эта переменная в первый раз появляется в каком-либо операторе VBA (обычно в операторе присваивания).
  2. Явный - имя и тип переменной определяются до первого обращения.

Явное объявление переменных предпочтительнее, так как:

Для явного объявления переменных используется оператор Dim со следующим синтаксисом:

Dim <имяПеременной> [As <типДанных>] 
Здесь:
имяПеременной - любой допустимый идентификатор;
типДанных - любой поддерживаемый VBA тип данных.

Для принудительного включения явного и обязательного объявления переменных используется оператор Option Explicit.Он должен быть расположен в самом начале модуля (раздел Declarations). При неявном объявлении переменной можно задавать ее тип, добавляя в конец имени специальные символы определения типа (type definition character). Эта возможность сохранена для совместимости с устаревшими версиями языка Basic.

Константы

VBA поддерживает неименованные и именованные константы. Неименованные константы — это фактические значения данных определенного типа. Их можно использовать без какого-либо объявления, непосредственно в выражениях.

Именованные константы — это мнемонические обозначения неименованных констант. Для использования в программе именованные константы должны быть предварительно объявлены с ключевым словом Const.

Синтакис объявления именованных констант:

Const <имяКонстанты> [As <типДанных>] = <значение1> 
Где:
имяКонстанты – имя константы;

значение – значение константы.

Пример:

Const intPersonCount As Integer = 100
Const maxLen% = 50

Библиотеки типов VBA представляют множество встроенных констант. Такие константы используются обычно при работе с объектами приложения. Эти константы не требуют предварительного описания. Имена встроенных констант начинаются с префикса, который указывает, к объекту какого приложения Microsoft Office они относятся: xl(Excel), wd(Word), ac(Access), pp(Power Point), ol(Outlook), vb(VBA).

Операции

В программах на VBA можно использовать весь типовой для универсального языка программирования набор операций:

Таблица 6. Математические операции

Операция Формат Название
+ [Операнд1] + [Операнд2] Сложение
- [Операнд1] - [Операнд2] Вычитание
- - [Операнд1] Перемена знака (или унарный минус)
* [Операнд1] * [Операнд2] Умножение
/ [Операнд1] / [Операнд2] Деление
\ [Операнд1] \ [Операнд2] Целочисленное деление
Mod [Операнд1] Mod [Операнд2] Остаток от деления
^ [Операнд1] ^ [Операнд2] Возведение в степень

Таблица 7. Операции отношения

Операция Формат Название
< [Операнд1] < [Операнд2] Меньше
> [Операнд1] > [Операнд2] Больше
<= [Операнд1] <= [Операнд2] Меньше или равно
>= [Операнд1] >= [Операнд2] Больше или равно
<> [Операнд1] <> [Операнд2] Не равно
= [Операнд1] = [Операнд2] Равно
Is [Операнд1] Is [Операнд2] Сравнение двух операндов, содержащих ссылки на объекты
Like [Операнд1] Like [Операнд2] Сравнение двух строковых выражений

Таблица 8. Логические операции

Операция Формат Название
And [Операнд1] And [Операнд2] Логическое умножение (И)
Or [Операнд1] Or [Операнд2] Логическое сложение (ИЛИ)
Xor [Операнд1] Xor [Операнд2] Исключающее Or (Исключающее «ИЛИ»)
Not Not [Операнд1] Логическое отрицание (НЕ)
Imp [Операнд1] Imp [Операнд2] Логическая импликация
Eqv [Операнд1] Eqv [Операнд2] Логическая эквивалентность

Таблица 9. Операции над строками

Операция Формат Название
& [Строка1] & [Строка2] Конкатенация (сцепление строк). Для сцепления строк допустимо использование операции вида [Строка1] + [Строка2]

Оператор присваивания

Оператор присваивания предназначен для задания ("присваивания") значения переменным, инициализации констант или изменения свойств объекта. Формат оператора присваивания:

[Let] <имяЭлемента> = <выражение> 
где:
Let - необязательная инструкция, которая сохранена для совместимости;
<имяЭлемента> – это идентификатор переменной, константы (при объявлении) или свойства объекта;

<выражение> состоит из переменных, констант, операций и функций.

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

Place="d:\windows\system"
File="GameTree.Exe"
Student_Card(100).Group=33 

Для присваивания переменной ссылки на объект применяется инструкция Set:

Set <объектная Переменная> = [New] <объектноеВыражение> | Nothing 
где:
New – опция (ключевое слово), которая используется при создании нового экземпляра класса;

Nothing – опция (ключевое слово), которая позволяет освободить все системные ресурсы и ресурсы памяти, выделенные для объекта.

В следующем примере инструкция Set присваивает переменной MyRange ссылку на диапазон ячеек А1:В1.
Set MyRange = Range("A1:B1") 

Приоритеты операций

Порядок выполнения операций определяется расстановкой круглых скобок и приоритетом (старшинством) операций. Это обеспечивает однозначность в трактовании значений выражений. В таб. 10 приведены приоритеты выполнения операций.

Таблица 10. Приоритеты операции VBA

Приоритет Операция
1 Вызов функции и скобки
2 ^
3 - (смена знака)
4 *, /
5 \
6 Mod
7 +, -
8 >, <, >=, <=, <>, =
9 Not
10 And
11 Or
12 Xor
13 Eqv
14 Imp

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

Листинг 2. Переменные, константы, операции

Private R As Single 'радиус
Public D As Single, S As Single, P As Single 'диаметр, периметр, площадь
Const PI = 3.14 'Константа PI (имеется встроенная функция VBA)
Sub sample2()
Dim res As String
R = 20
D = 2 * R 'вычисляем диаметр
S = PI * R ^ 2 'вычисляем площадь
P = D * PI 'вычисляем периметр
'формируем строку сообщения
res = "Для окружности с радиусом " & CStr(R) & " диаметр равен " & CStr(D) &
_ ", периметр - " & CStr(P) & ", площадь - " & CStr(S)
Debug.Print res ' вывод результата в окно отладчика
End Sub 

CC-BY-CA Анатольев А.Г., 31.01.2012