Язык программирования vba типы переменных

Основы 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 .

Таблица 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. приведены некоторые префиксы.

Таблица 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 и обратная связь.

Обратная связь

Были ли сведения на этой странице полезными?

Источник

Оцените статью