 
        
        - •266Лекция 13. Язык программирования Visual Basic for Application (vba)
- •Лекция 13. Язык программирования Visual Basic for Application (vba)
- •Типы данных
- •Инструкции vba
- •Имена vba
- •Процедуры vba
- •Подпрограмма Sub
- •Функция Function
- •Функции ввода-вывода данных и сообщений
- •Функция MsgBox
- •Функция InputBox
- •Управляющие конструкции vba
- •Проверка условия — If
- •Select Case
- •For Next
- •While…Wend
- •Do …Loop
- •Функции пользователя
- •Макросы Microsoft Office
- •Макросы Word
- •Макросы Excel
- •Макросы Access
- •Контрольные вопросы
266Лекция 13. Язык программирования Visual Basic for Application (vba)

Лекция 13. Язык программирования Visual Basic for Application (vba)
Изучение языка программирования VBA следует начинать со знакомства с основными элементами языка. Программные модули VBA состоят из процедур и функций, которые включают инструкции (команды) различного типа, объявления переменных, описания типов данных, значения констант, объекты VBA и т.п.
Типы данных
VBA обрабатывает данные различных типов, форматы данных приведены в табл. 1. Тип данных указывается при объявлении переменных, массивов, пользовательских типов данных. С помощью встроенных функций VBA выполняется преобразование типов данных.
Таблица 13.1
| Тип | Значение и длина типа данных | Функция | 
| Boolean | Логическое True (истина, -1), False (ложь, 0), 2 байта | CBool | 
| Currency | Числовое значений, денежный формат с фиксированным количеством знаков после десятичной запятой, 8 байтов | CCur | 
| Date | Дата/время, 8 байтов | CDate | 
| Double | Числовое значение, плавающая точка, двойная точность, 8 байтов | CDbl 
 | 
| Integer | Числовое значение, короткое целое, 2 байта | CInt | 
| Long | Числовое значение, длинное целое, 4 байта | CLng 
 | 
| Single | Числовое значение, плавающая точка, обычная точность, 4 байта | CSng | 
| Decimal | Числовое значение, до 28 значащих цифр, 14 байт | CDec | 
| String | Строковые значения, 1 символ занимает 1 байт | CStr | 
| Byte | Целое число от 0 до 255, отдельные символы, 1 байт | CByte | 
| Variant | Универсальный тип данных, 16 байтов плюс по 1 байту на каждый символ строковых данных | CVar | 
| Object | Ссылка на объекты, 4 байта | 
 | 
Переменные — именованные области памяти для временного хранения значений выражений или свойств объектов. В VBA используется два режима объявления переменных:
- необязательное объявление (по умолчанию все переменные имеют тип Variant); 
- обязательное объявление — в начале программного модуля размещается оператор Option Explicit и оператор Dim объявления переменных. 
Для переменных различается область действия:
- процедура — используются личные переменные, которые действительны только внутри процедуры: 
Dim имя As тип
Private имя As тип
Для сохранения значения переменной при выходе из процедуры и ее повторного использования указывается
Static имя_переменной As тип
- модуль — переменные используются всеми процедурами данного модуля: 
Dim имя As тип
- проект — общие переменные используются всеми процедурами любых модулей проекта: 
Public имя As тип
Можно объявлять несколько переменных в одном предложении, указав для каждой переменной тип. Если тип данных не указан, считается, что он соответствует Variant. Например, для переменной Z по умолчанию тип Variant:
Dim X As Integer, Y As String, Z
Массив переменных содержит элементы, которые идентифицируются с помощью имени массива и индекса (порядкового номера элемента). Размерность массива может достигать 60. По умолчанию индексы массива начинаются с 0, верхние и нижние границы каждой размерности определяются целочисленными значениями1.
При объявлении массивов различной сферы действия используются ключевые слова Dim, Public, Private и Static. Тип элементов массива задается с помощью ключевого слова As:
Dim имя_массива (размер1, …, размер n) As тип
Пример 1
Определить двумерный массив (матрицу), 10 строк и 10 столбцов целых чисел.
Dim MyArray(9, 9) As Integer
В VBA можно использовать динамические массивы, верхняя граница размерности которых может многократно изменяться, например:
Dim Arr1() As Single
Для очередного изменения размерности массива выполняется инструкция:
ReDim Arr1(10)
Для расширения состава типов данных служит пользовательский тип данных, в одну структуру включаются разнородные элементы информации:
[Private|Public] Type имя_типа
имя_элемента1 [([индексы])] As тип
имя_элемента2 [([индексы])] As тип
…
End Type
Для присвоения значения элементам пользовательских типов данных используется выражение вида:
имя_типа.имя_элемента = <значение>
Присвоение переменной пользовательского типа данных выполняется с помощью инструкций:
Dim имя As имя_типа
или
Dim имя_массива (размер) As имя_типа
Пример 2
Создать пользовательский тип данных State, содержащий:
- статический массив — Code, состоящий из 10 целых чисел; 
- строковую переменную — Cnty фиксированной длины в 30 символов. 
На основе типа данных State определить массив ExState размерностью 50 элементов.
Фрагмент программного кода:
Type State
Code (1 To 10) As Integer
Cnty As String * 30
End Type
Dim ExState (1 To 50) As State
