О стоимости курса |
Основы VBA: синтаксис, переменные, типы данных
5.1. Синтаксические описания
Синтаксис языка программирования — это правила написания программ.
Рассмотрим пример — возьмем из справочной системы описание команды. Мы пока не будем вдаваться в смысл ключевых слов (перед нами — описание оператора цикла), приведенных здесь, остановимся на основных частях описания.
For counter = start To end [Step step] [statements] [Exit For] [statements] Next [counter]
В синтаксических описаниях VBA жирным шрифтом выделены ключевые слова языка, курсивом даны названия переменных и других элементов языка. В квадратных скобках располагаются необязательные элементы – то есть такие элементы, без описания которых можно обойтись. Например, в приведенном описании блоки [statements] будут содержать в себе "полезную нагрузку" цикла – операторы, которые будут выполняться многократно, однако цикл будет работать и без них.
Элементы, которые допускают альтернативный выбор, разделяются знаком " | ". Например, такая запись: " one | two " обозначает "one или two".
Ниже мы будем останавливаться на существенно важных особенностях тех или иных конструкций. Если вам понадобятся подробности — вы сможете найти их в справке к VBA.
Теперь рассмотрим понятие переменной — важнейшее понятие в любом языке программирования.
5.2. Переменные
05-01-Переменная.docm — пример к п. 5.2.
Переменная — это именованная область памяти, где могут храниться различные данные, которые можно изменять во время выполнения программы. Переменные — это одна из основ любой программы. В них можно сохранять введенную пользователем информацию, их можно использовать для накопления данных, обработанных в программе и так далее. Если бы не было переменных — программирования не существовало бы.
У переменной есть несколько важнейших характеристик. Первая — имя переменной. Используя имя, мы можем обращаться к переменной в программе. Вторая характеристика — это тип данных, которые могут храниться в переменной. Тип определяет характер данных, которые мы можем хранить в переменной. Например, это могут быть числовые данные (возраст пользователя) и строковые данные (имя пользователя).
О типах мы поговорим ниже, а пока займемся именами переменных. Давая переменным имена, следует придерживаться следующих правил.
- Имя переменной должно состоять из букв и цифр, причем оно должно начинаться с буквы.
- Имя не может быть длиннее 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. вы можете видеть это окно.
Выражение txt_Name = означает, что мы присваиваем переменной с именем txt_Name то, что пользователь введет в окне ввода данных, как бы говорим программе: "Сохрани в переменной txt_Name то, что пользователь введет в окне". Когда пользователь сообщает свое имя и нажимает OK —введенная им строка записывается в переменную txt_Name. Введем на приглашение программы имя "Александр", вы можете ввести любое другое имя.
Теперь мы можем выполнять много разных действий с этой переменной. В частности — использовать в качестве параметра, передаваемого функции MsgBox. В данном примере мы так и поступили — вызвали MsgBox, указав вместо выводимого текста имя переменной. В результате в окне сообщения вывелось имя пользователя, введенное на предыдущем этапе (рис. 5.2.).
Обратите внимание на то, что мы не заключили имя переменной в кавычки. Иначе в окне сообщения вывелось бы лишь имя переменной ( txt_Name ), но не хранимый в ней текст.
5.3. Типы данных в VBA
Тип данных определяет важнейшие свойства переменной. А именно, следующее:
- что может храниться в переменной (текст, число, некоторые другие виды данных);
- размер памяти, необходимый для хранения переменной (измеряется в байтах);
- операции, которые можно производить с переменной (например, невозможно извлечь квадратный корень из слова "Привет" так как эта операция не определена для строковых данных);
Вы уже можете предположить как минимум два типа данных, которые могут хранить переменные — строковые и числовые. На самом деле список типов данных VBA гораздо обширнее.
В табл. 5.1. вы найдете информацию об основных типах данных VBA.
Как видите, в VBA существует немало типов данных. Наверное, сейчас вам кажется, что их слишком много. Может показаться, что нет ничего удобнее типа данных Variant. Однако надо учесть, что за универсальность типа Variant приходится платить производительностью и системными ресурсами. Чем больше места требуется для хранения переменной — тем ниже скорость работы с ней.
Если вы хотите, чтобы ваши программы работали как можно быстрее — выбирайте типы данных, которые используют для хранения вашей информации минимум системных ресурсов. Если вы сомневаетесь, хватит ли размерности выбранного типа данных для решения ваших задач — возьмите более емкий тип.
Как правило, для работы с дробными числами и различных вычислений используют тип данных Double. Для переменных, которые используются в циклах, счетчиках — Integer или Long. В работе со строками используют String. Объектные переменные имеют самые разные типы, которые определяются объектами, для обращения к которым они создаются. В небольших проектах вполне оправдано использование переменных типа Variant – это не слишком замедлит работу. Однако, если размер проекта растет или вы нуждаетесь в ускорении ресурсоемких вычислений – подходите к выбору типов данных ответственно.
Если при объявлении переменной не указывать ее тип — он автоматически устанавливается в Variant. Объявляя переменную без указания типа, вы пользуетесь преимуществами работы с объявленными переменными, и, в то же время, можете гибко использовать переменную для хранения различных типов данных (например – чисел с плавающей запятой и целых чисел). Такой подход — объявление переменных без указания типа — допустим при создании небольших проектов, а так же — на начальном этапе работы над достаточно масштабными программами, когда вы не знаете точно, какой тип данных понадобится для той или иной переменной. В листингах, которые вы найдете ниже, мы явно задавали тип переменных лишь тогда, когда это либо требовалось по ходу выполнения примера (например – типы объектных переменных ), либо, когда это нужно для лучшего понимания материала (числовой тип для возраста, строковой — для имени и т.д.) В основном же мы использовали переменные типа Variant.
Выше мы уже говорили о венгерской нотации как о способе именования объектов. Те же правила действуют и для переменных. Префикс имени обычно говорит о типе переменной. В табл. 5.2. приведены некоторые префиксы.
Для работы с переменными можно использовать два подхода. При первом мы выбираем имя переменной и используем ее в программе без каких-либо подготовительных действий. Именно так мы работали с переменной в примере к п. 5.2. Такая переменная приобретет тип Variant. Второй подход предусматривает объявление переменных перед использованием.