Основы VBA: синтаксис, переменные, типы данных
Аннотация: Лекция посвящена описанию основных конструкций и принципов VBA. Она является вводной лекцией по общим приемам программирования на 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. Переменные
Переменная — это именованная область памяти, где могут храниться различные данные, которые можно изменять во время выполнения программы . Переменные — это одна из основ любой программы. В них можно сохранять введенную пользователем информацию, их можно использовать для накопления данных, обработанных в программе и так далее. Если бы не было переменных — программирования не существовало бы.
У переменной есть несколько важнейших характеристик. Первая — имя переменной . Используя имя, мы можем обращаться к переменной в программе. Вторая характеристика — это тип данных , которые могут храниться в переменной . Тип определяет характер данных, которые мы можем хранить в переменной . Например, это могут быть числовые данные (возраст пользователя) и строковые данные ( имя пользователя ).
О типах мы поговорим ниже, а пока займемся именами переменных . Давая переменным имена, следует придерживаться следующих правил.
- Имя переменной должно состоять из букв и цифр, причем оно должно начинаться с буквы.
- Имя не может быть длиннее 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)
Первая строка этого кода содержит новую для вас функцию 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 .
Тип данных | Размер, байт | Описание | Диапазон значений |
---|---|---|---|
Variant | 16 (числа) 22+длина строки (строки) | Может хранить данные любых типов | |
Integer | 2 | Целое число | от -32768 до 32767 |
Long | 4 | Длинное целое | от -2147483648 до 2147483647 |
Single | 4 | Число с плавающей запятой | Для отрицательных: от -3.402823E38 до -1.401298E-45 Для положительных: от 1.401298E-45 до 3.402823E38 |
Double | 8 | Число с плавающей запятой двойной точности, для отрицательных значений и для положительных | Для отрицательных от -1.79769313486231E308 до -4.94065645841247E-324 Для положительных: от 4.94065645841247E-324 до 1.79769313486232E308 |
Byte | 1 | Байт | от 0 до 255 |
Currency | 8 | Денежный формат | от -922,337,203,685,477.5808 до 922,337,203,685,477.5807 |
Decimal | 14 | Масштабируемое целое | 29-значное число с 28 знаками справа от запятой |
Boolean | 2 | Логический | True или False |
Date | 8 | Дата и время | от 1 января 1900 г. до 31 декабря 9999 г. |
Object | 4 | Ссылка на объект | Различные виды объектов |
String | Зависит от длины строки | Строка |
Как видите, в VBA существует немало типов данных. Наверное, сейчас вам кажется, что их слишком много. Может показаться, что нет ничего удобнее типа данных Variant . Однако надо учесть, что за универсальность типа Variant приходится платить производительностью и системными ресурсами. Чем больше места требуется для хранения переменной — тем ниже скорость работы с ней.
Если вы хотите, чтобы ваши программы работали как можно быстрее — выбирайте типы данных , которые используют для хранения вашей информации минимум системных ресурсов. Если вы сомневаетесь, хватит ли размерности выбранного типа данных для решения ваших задач — возьмите более емкий тип.
Как правило, для работы с дробными числами и различных вычислений используют тип данных Double . Для переменных , которые используются в циклах, счетчиках — Integer или Long . В работе со строками используют String . Объектные переменные имеют самые разные типы, которые определяются объектами, для обращения к которым они создаются. В небольших проектах вполне оправдано использование переменных типа Variant – это не слишком замедлит работу. Однако, если размер проекта растет или вы нуждаетесь в ускорении ресурсоемких вычислений – подходите к выбору типов данных ответственно.
Если при объявлении переменной не указывать ее тип — он автоматически устанавливается в Variant . Объявляя переменную без указания типа, вы пользуетесь преимуществами работы с объявленными переменными , и, в то же время, можете гибко использовать переменную для хранения различных типов данных (например – чисел с плавающей запятой и целых чисел). Такой подход — объявление переменных без указания типа — допустим при создании небольших проектов, а так же — на начальном этапе работы над достаточно масштабными программами, когда вы не знаете точно, какой тип данных понадобится для той или иной переменной . В листингах, которые вы найдете ниже, мы явно задавали тип переменных лишь тогда, когда это либо требовалось по ходу выполнения примера (например – типы объектных переменных ), либо, когда это нужно для лучшего понимания материала ( числовой тип для возраста, строковой — для имени и т.д.) В основном же мы использовали переменные типа Variant .
Выше мы уже говорили о венгерской нотации как о способе именования объектов. Те же правила действуют и для переменных . Префикс имени обычно говорит о типе переменной . В табл. 5.2. приведены некоторые префиксы.
Префикс имени переменной | Пояснения |
---|---|
s, str | Строковая переменная |
n, num | Числовая переменная (существует множество числовых типов данных, название каждого из которых может быть использовано в качестве префикса, например, int для Integer, dbl для Double и т.д.) |
b, bool | Логическая переменная |
O, obj | Объектная переменная |
Для работы с переменными можно использовать два подхода. При первом мы выбираем имя переменной и используем ее в программе без каких-либо подготовительных действий. Именно так мы работали с переменной в примере к п. 5.2. Такая переменная приобретет тип Variant . Второй подход предусматривает объявление переменных перед использованием.
Сводка типов данных
Тип данных — это характеристика переменной, определяющая тип содержащихся в ней данных. К типам данных относятся типы, указанные в таблице ниже, а также пользовательские типы и определенные типы объектов.
Набор встроенных типов данных
В следующей таблице показываются поддерживаемые типы данных, включая размеры хранилищ и диапазоны.
+/–7,9228162514264337593543950335 с 28 разрядами справа от десятичной запятой
Тип Variant, содержащий массив, требует на 12 байт больше, чем сам массив.
Для массивов данных любого типа требуются 20 байтов памяти плюс 4 байта на каждую размерность массива, плюс количество байтов, занимаемых самими данными. Память, занимаемая данными, может быть вычислена путем умножения количества элементов данных на размер каждого элемента.
Например, данные в одномерном массиве, состоящем из 4 элементов данных Integer размером 2 байта каждый занимают 8 байтов. 8 байтов, необходимых для данных, плюс 24 байта служебных данных составляют 32 байта полной памяти, требуемой для массива. На 64-разрядных платформах массив SAFEARRAY занимает 24 бита (плюс 4 байта на оператор Dim). Элемент pvData является 8-байтным указателем, и он должен находиться в границах 8 байтов.
Тип LongPtr не является настоящим типом данных, так как он преобразуется в тип Long в 32-разрядных средах или в тип LongLong в 64-разрядных средах. Тип LongPtr должен использоваться для представления указателя и обработки значений в операторах Declare и позволяет писать переносимый код, который может выполняться как в 32-разрядных, так и в 64-разрядных средах.
Для преобразования одного типа строковых данных в другой используется функция StrConv.
Преобразование между типами данных
В статье Функции преобразования типов приведены примеры использования следующих функций для приведения выражения к определенному типу данных: CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CLngLng, CLngPtr, CSng, CStr и CVar.
Ниже приведены страницы соответствующих функций: CVErr, Fix и Int.
Функция CLngLng действительна только для 64-разрядных платформ.
Проверка типов данных
Чтобы проверить типы данных, ознакомьтесь с приведенными ниже функциями.
Возвращаемые значения функции CStr
Если expression | CStr возвращает |
---|---|
Boolean | Строка, содержащая значение True или False. |
Date | Строка, содержащая полный или краткий формат даты, установленный в системе. |
Empty | Строка нулевой длины («»). |
Error | Строка, содержащая слово Error и номер ошибки. |
Null | Ошибка во время выполнения. |
Другое числовое значение | Строка, содержащая число |
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?