Опубликован: 01.04.2010 | Уровень: для всех | Доступ: свободно | ВУЗ: Национальный исследовательский университет "Высшая Школа Экономики"
Лекция 4:

Переменные и типы данных

< Лекция 3 || Лекция 4: 123 || Лекция 5 >
Аннотация: В лекции рассматривается вопрос важности объявления переменных. Представлены типы данных: элементарные типы, объектные переменные, массивы и пользовательские типы. Особое внимание уделяется вопросам инициализация переменных, области видимости и времени жизни переменных.

Объявление переменных

Данные, используемые в процедурах, разделяются на два основных вида: константы и переменные. Для обозначения констант и переменных служит имя (идентификатор). Имя состоит из латинских букв, цифр или знаков, причем первый символ всегда буква.

Внимание:
  • Нельзя использовать служебные слова и стандартные имена как идентификаторы.
  • Нельзя использовать пробелы и точки в качестве разделителей частей имен.
  • Символы объявления типа, например, "#" можно использовать только как последний символ имени (см. ниже таблицу суффиксов).
  • Строчные и прописные буквы в имени считаются равными.
  • Длина имени не может быть более 255 символов. Длина имен объектов не должна превышать 40 символов.
  • Не рекомендуется использовать в имени буквы русского языка, несмотря на то, что это допускается в локализованных версиях MS Office. Применение не латинских символов в идентификаторах может привести к проблемам с переносимостью приложения на другие компьютеры.

Константа - постоянное значение, используемое в программе. Константам можно присвоить имя и использовать их в качестве переменных, имеющих постоянные значения. Символьные константы заключаются в кавычки, а константы, представляющие даты, заключаются в символы решетка (#). Например, #1.12.2006#.

Прежде чем использовать константу в тексте модуля, ее обязательно следует объявить. Синтаксис объявления константы Const name=expression

Например, Const pi=3.14

В языке имеются встроенные константы, имена которых зарезервированы. Использование констант улучшает читабельность программы и уменьшает вероятность ошибок при использовании постоянных значений. Имена констант VB начинаются с vb, а константы Excel VBA начинаются с xl. Для просмотра полного перечня встроенных констант задайте поисковую строку Constants в Object Browser.

Переменная - это величина, которая хранится в памяти и значение которой может изменяться во время выполнения программы. Каждая переменная или константа имеет тип, соответствующий типу данных, сохраняемых в ней.

Важность объявления переменных

Перечислим основные аргументы в пользу объявления переменных.

  • Объявление переменных поможет избежать самого распространенного типа ошибок - ошибок, связанных с неправильным написанием имен переменных, например, вместо идентификатора wbkVar в команде может быть записано wkbVar.
  • Если переменная объявлена, Visual Basic проверяет, используется ли правильный тип данных в операциях с этой переменной.
  • Объявление переменных исключает преобразование значений переменных, которое происходит при вычислении выражений, из типа Variant в другой тип.
  • Использование переменных различных типов уменьшает память, занимаемую переменными, и сокращает время выполняемых вычислений, благодаря чему программы становятся более эффективными.
  • Объявление переменных позволяет создавать переменные, которые можно использовать в нескольких процедурах или модулях (модульные и глобальные переменные). Можно определять также переменные, сохраняющие свои значения после выхода из процедуры.

Чтобы избежать использования переменных без объявления, можно поместить в область Declarations каждого модуля инструкцию Option Explicit. Тогда при обращении к переменной, не объявленной ранее, возникнет сообщение об ошибке компиляции.

Ошибка компиляции - переменная неопределенна

Рис. 4.1. Ошибка компиляции - переменная неопределенна

Чтобы принудительно следовать стратегии объявления переменных, включите опцию Require Variable Declaration (Требовать описание переменных) в окне команды Tools-Options и тогда инструкция Option Explicit будет автоматически вставляться во все модули и процедурные листы проекта.

Типы данных

В VBA, как и в любом языке, используются данные различных типов: числовые, строковые, логические и т.п. - всего 11 элементарных типов. Допустимо использование данных пользовательского типа.

Типы данных
Тип данных Размер в байтах Разрядность Диапазон значений
Boolean (логическое) 2 5 True, False
Byte (байт) 1 3 от 0 до 255
Integer (целое) 2 5 от -32768 до 32767
Long (длинное целое) 4 10 от -2147483648 до 2147483647
Single (действительное, одинарная точность) 4 7 от -3.402823E+38 до -1.401298E-45 и от 1.401298E-45 до 3.402823E+38
Double (действительное, двойная точность) 8 15 от -1.79769313486232E+308 до -4.94065645841247E-324 и от 4.94065645841247E-324 до 1.79769313486232E+308
Currency (фиксированная точка) 8 10 от -922337203685477.5808 до 922337203685477.5807
Date (дата) 8 от 01.01.100 до 31.12.9999
String (символьная строка) 10 байт + 1 байт на символ для строк переменной длины

Длина строки для строк фиксированной длины

до 2^16 символов
Object (объект) 4 Указатель на любой объект
Variant (любое значение) 16 байт для числовых значений См. диапазон значений для Double
22 байта плюс длина строки для символьных значений до 65400 символов
User-defined )data type (пользовательский тип данных) Размер определяется элементами Разрядность и диапазон каждого элемента, входящего в пользовательский тип, определяется типом данных элемента

В языке VBA предусмотрено предварительное объявление переменных, участвующих в программе, но оно не является обязательным.

Важно:
  • Переменная может принимать значения только одного типа, который указывается при ее описании или предполагается по умолчанию.
  • Тип переменной накладывает ограничения на ее возможные значения и определяет разрешенные операции.
  • Присвоение переменной значения, не соответствующего ее типу, вызывает преобразование значения или может привести к ошибке.

Для объявления переменных используются операторы Dim, Private, Public и Static.

Синтаксис оператора Dim:

Dim VariableName [As DataType]
  • VariableName - идентификатор переменной,
  • DataType - тип данных. Необязательный параметр. По умолчанию Variant.

Операторы Private, Public и Static имеют такой же синтаксис, что и оператор Dim. Их использование разбирается ниже.

Примеры

Dim p As Integer

Dim q As String

Dim r As Variant

Каждая переменная объявлена отдельным оператором на отдельной строке
Dim p As Integer, q

As String, r As

Variant

Несколько объявлений переменных в одной строке.

Разделитель - запятая

Dim p, q, r As

Integer

Только переменная r будет определена как целая, остальные будут иметь тип Variant

VBA позволяет включать в имена переменных суффиксы, определяющие тип переменной. Например, Dim Name$ определяет переменную Name$ как стринговую.

В таблице справа представлены суффиксы и типы переменных, объявляемых с помощью добавления суффикса в конец идентификатора.

Суффикс Тип
% Integer
& Long
! Single
# Double
@ Currency
$ String
Внимание:
  • Операторы объявления переменных относятся к неисполняемым операторам, т.е. они содержат некоторую информацию для VB, не выполняя никаких действий.
  • Оператор объявления переменной может стоять в любом месте программы, но обязательно раньше использования определяемой переменной.
  • Объявление переменных в начале процедуры или модуля улучшает читабельность программы.

Локальные переменные (понятие вводится ниже) могут быть объявлены неявно (контекстуально). Обычно это происходит, если имя переменной присутствует слева в операторе присваивания или используется в качестве переменной цикла. Переменная, объявленная неявно, всегда имеет тип Variant.

Тип Variant

Переменная, которая используется без объявления, а также переменная, тип которой явно не задан, относится к типу Variant.

Тип Variant используется, если во время выполнения программы переменная может принимать значения любого типа, за исключением пользовательских типов данных.

Использование переменной типа Variant поглощает больше ресурсов компьютера, чем использование переменной элементарного типа.

Переменная типа Variant может содержать специальные значения: Empty, Null, Nothing или Error.

Значение Описание
Empty Устанавливается при инициализации. В случае использования переменной как числа означает нуль, а в случае использования ее как символа - строку нулевой длины (пустую строку).

Значение Empty может быть установлено специально, чтобы показать отсутствие значения.

Null Специальное значение, которое применяется, чтобы показать, что переменная не содержит верных данных. Это значение устанавливается оператором присваивания или является результатом вычисления выражения, если один из операндов имеет значение Null.
Nothing Устанавливается при инициализации объектной переменной или оператором Set. Свидетельствует об отсутствии ссылки на объект (см. Раздел 6.Объекты MS Excel).
Error Специальное значение, устанавливаемое функцией CVErr. Позволяет программе выполнить альтернативное действие в ситуации ошибки (системные ошибки выполнения, например, ошибка деления на нуль, не имеются в виду). Подробно см. Help.
Важно:
  • Используйте функции IsEmpty, IsNull, IsError для сравнения значения переменной со специальными значениями.

При вычислении арифметических выражений переменные типа Variant, содержащие числовые значения, ведут себя обычным образом: переменные этого типа преобразуются в другой тип в сторону увеличения длины результата.

Если в арифметическом выражении участвует переменная типа Variant, содержащая символьное значение, то ее значение преобразуется в число, если это возможно. В противном случае числовые значения преобразуются в строки и, если выполняемая операция не операция сложения, то возникает ошибка.

Объектные переменные

Объектная переменная занимает четыре байта и хранит адрес, указывающий на объект. Обычно в программах используют объектную переменную при создании собственного объекта. Подробно см. раздел Использование объектных переменных.

Объявление переменных объектного типа ничем не отличается от объявления переменных других типов. Синтаксис объявления объектной переменной Dim varname As type, где type - тип объекта.

Возможен тип любого объекта VBA или ключевое слово Object. Например, Dim p As Object, Dim r as Range, Dim w As Workbook.

Оператор Set

Для работы с объектами требуется устанавливать значение объектной переменной. В отличие от переменных других типов установка значения объектной переменной выполняется при помощи оператора Set.

Синтаксис оператора:

Set objectvar = objectexpression|Nothing
  • objectvar - объектная переменная;
  • objectexpression - объектное выражение;
  • Nothing - ключевое слово, указывающее на отсутствие ссылки на объект.

Переменная может иметь тип любого объекта, определенного в языке VBA. В качестве объектного выражения можно использовать свойство, функцию или метод, возвращающие объект нужного типа.

Внимание:
  • Оператор Set только устанавливает ссылку на объект, не создавая никакой копии.
  • Типы объектного выражения и объектной переменной должны совпадать.
  • Чтобы очистить объектную переменную, используйте значение Nothing в операторе присваивания, которое аннулирует ссылку на объект и освобождает ресурсы. Например: Set rng= Nothing.
< Лекция 3 || Лекция 4: 123 || Лекция 5 >
Дмитрий Денисов
Дмитрий Денисов

Еще раз повторяю вопрос  - отправил договор и сканы документов по почте - в начале августа, до  5 го, внес предоплату - летом действовала скидка - чтобы пройти курс в августе, но я уезжал в Москву. По возвращению - и  в течение месяца - никакого ответа, никаких зачислений, ничего. Как проверить, пришли ли мои документы в Интуит, предоплата, почему нет зачисления.

Дмитрий Денисов
Дмитрий Денисов

Как записаться на курс, оплатить, не ориентируюсь в программе.

Ранее у Вас учился.

Работаю преподавателем, есть справка. Как получить скидку, т.е. оплата 2000


 

Андрей Гуменюк
Андрей Гуменюк
Молдова