Лекция 5. Основы VBA: синтаксис, переменные, типы данных
Синтаксические описания
Синтаксис языка программирования — это правила написания программ.
Рассмотрим пример — возьмем из справочной системы описание команды. Мы пока не будем вдаваться в смысл ключевых слов (перед нами — описание оператора цикла), приведенных здесь, остановимся на основных частях описания.
For counter = start To end [Step step][statements][Exit For][statements]Next [counter]В синтаксических описаниях VBA жирным шрифтом выделены ключевые слова языка, курсивом даны названия переменных и других элементов языка. В квадратных скобках располагаются необязательные элементы – то есть такие элементы, без описания которых можно обойтись. Например, в приведенном описании блоки [statements] будут содержать в себе "полезную нагрузку" цикла – операторы, которые будут выполняться многократно, однако цикл будет работать и без них.
Элементы, которые допускают альтернативный выбор, разделяются знаком " | ". Например, такая запись: " one | two " обозначает "one или two".
Ниже мы будем останавливаться на существенно важных особенностях тех или иных конструкций. Если вам понадобятся подробности — вы сможете найти их в справке к VBA.
Переменные
Переменная — это именованная область памяти, где могут храниться различные данные, которые можно изменять во время выполнения программы. У переменной есть несколько важнейших характеристик. Первая — имя переменной. Вторая характеристика — это тип данных, которые могут храниться в переменной. Тип определяет характер данных, которые мы можем хранить в переменной. Например, это могут быть числовые данные (возраст пользователя) и строковые данные (имя пользователя).
Давая переменным имена, следует придерживаться следующих правил.
· Имя переменной должно состоять из букв и цифр, причем оно должно начинаться с буквы.
· Имя не может быть длиннее 255 символов
· Имя не должно содержать специальных знаков ( #, $, % и т.д.) и пробелов.
· В качестве имен нельзя использовать зарезервированные слова VBA (например – if, dim, for и т.д.).
При именовании переменных старайтесь пользоваться латинскими буквами. Иначе возможны проблемы при работе ваших программ на различных версиях Office.
Например, такие имена переменных выглядят вполне корректно: str_Name, num_Age, str_Name1, num_Item2 и т.д. Обратите внимание на префиксы, которыми мы снабдили имена переменных. Это признак особого стиля именования переменных. Он очень напоминает стиль именования элементов управления, который мы рассматривали выше.
Напишем программу на VBA, иллюстрирующую простой пример работы с переменными. Сначала она должна задать пользователю вопрос: "Как вас зовут", а потом — вывести его имя в окне сообщения.
Для этого добавим в документ Microsoft Word кнопку с именем cmd_Variables и надписью "Имя пользователя". Зададим ее обработчику Click следующий код (листинг 5.1.):
txt_Name = InputBox("Введите ваше имя") MsgBox (txt_Name)Листинг 5.1. Код обработчика Click кнопки cmd_Variables
Первая строка этого кода содержит новую для вас функцию InputBox. Она используется для вывода окна с сообщением и полем для ввода данных. Строка, которая передается функции в качестве параметра — это и есть сообщение, которое будет выведено в окне.
На рис. 5.1. вы можете видеть это окно.
Рис. 5.1.Окно ввода данных
Выражение txt_Name = означает, что мы присваиваем переменной с именем txt_Name то, что пользователь введет в окне ввода данных, как бы говорим программе: "Сохрани в переменной txt_Name то, что пользователь введет в окне". Когда пользователь сообщает свое имя и нажимает OK —введенная им строка записывается в переменную txt_Name. Введем на приглашение программы имя "Александр", вы можете ввести любое другое имя.
Теперь мы можем выполнять много разных действий с этой переменной. В частности — использовать в качестве параметра, передаваемого функции MsgBox. В данном примере мы так и поступили — вызвали MsgBox, указав вместо выводимого текста имя переменной. В результате в окне сообщения вывелось имя пользователя, введенное на предыдущем этапе (рис. 5.2.).
Рис. 5.2.Имя пользователя в окне сообщения
Обратите внимание на то, что мы не заключили имя переменной в кавычки. Иначе в окне сообщения вывелось бы лишь имя переменной ( txt_Name ), но не хранимый в ней текст.
Типы данных в VBA
Тип данных определяет важнейшие свойства переменной. А именно, следующее:
· что может храниться в переменной (текст, число, некоторые другие виды данных);
· размер памяти, необходимый для хранения переменной (измеряется в байтах);
· операции, которые можно производить с переменной (например, невозможно извлечь квадратный корень из слова "Привет" так как эта операция не определена для строковых данных);
Таблица 5.1. Типы данных в VBA | |||
Тип данных | Размер, байт | Описание | Диапазон значений |
Variant | 16 (числа) 22+длина строки (строки) | Может хранить данные любых типов | |
Integer | Целое число | от -32768 до 32767 | |
Long | Длинное целое | от -2147483648 до 2147483647 | |
Single | Число с плавающей запятой | Для отрицательных: от -3.402823E38 до -1.401298E-45 Для положительных: от 1.401298E-45 до 3.402823E38 | |
Double | Число с плавающей запятой двойной точности, для отрицательных значений и для положительных | Для отрицательных от -1.79769313486231E308 до -4.94065645841247E-324 Для положительных: от 4.94065645841247E-324 до 1.79769313486232E308 | |
Byte | Байт | от 0 до 255 | |
Currency | Денежный формат | от -922,337,203,685,477.5808 до 922,337,203,685,477.5807 | |
Decimal | Масштабируемое целое | 29-значное число с 28 знаками справа от запятой | |
Boolean | Логический | True или False | |
Date | Дата и время | от 1 января 100 г. до 31 декабря 9999 г. | |
Object | Ссылка на объект | Различные виды объектов | |
String | Зависит от длины строки | Строка |
Если при объявлении переменной не указывать ее тип — он автоматически устанавливается в Variant. Объявляя переменную без указания типа, вы пользуетесь преимуществами работы с объявленными переменными, и, в то же время, можете гибко использовать переменную для хранения различных типов данных (например – чисел с плавающей запятой и целых чисел). Такой подход — объявление переменных без указания типа — допустим при создании небольших проектов, а так же — на начальном этапе работы над достаточно масштабными программами, когда вы не знаете точно, какой тип данных понадобится для той или иной переменной. В листингах, которые вы найдете ниже, мы явно задавали тип переменных лишь тогда, когда это либо требовалось по ходу выполнения примера (например – типы объектных переменных ), либо, когда это нужно для лучшего понимания материала (числовой тип для возраста, строковой — для имени и т.д.) В основном же мы использовали переменные типа Variant.
Выше мы уже говорили о венгерской нотации как о способе именования объектов. Те же правила действуют и для переменных. Префикс имени обычно говорит о типе переменной. В табл. 5.2. приведены некоторые префиксы.
Таблица 5.2. Префиксы и типы переменных | |
Префикс имени переменной | Пояснения |
s, str | Строковая переменная |
n, num | Числовая переменная (существует множество числовых типов данных, название каждого из которых может быть использовано в качестве префикса, например, int для Integer, dbl для Double и т.д.) |
b, bool | Логическая переменная |
O, obj | Объектная переменная |
Для работы с переменными можно использовать два подхода. При первом мы выбираем имя переменной и используем ее в программе без каких-либо подготовительных действий. Именно так мы работали с переменной в примере к п. 5.2. Такая переменная приобретет тип Variant. Второй подход предусматривает объявление переменных перед использованием.