Объявление переменной

Объявление обычной или объектной переменной производится с помощью оператора Dim по следующей схеме:

Dim [WithEvents] <Имя переменной1> [As [New] <Тип>] [, ...,
    [WithEvents] <Имя переменнойN> [As [New] <Тип>]]

Пример объявления одной переменной:

Dim s As String

Пример объявления трех переменных:

Dim x As Integer, y As Double, s As String

Объявим две переменные типа Variant и одну переменную типа Integer:

Dim n, x As Integer, m As Variant

В этом примере переменные n и m будут иметь тип Variant, а переменная x — тип Integer. Обратите еще раз внимание на то, что переменная n имеет тип Variant, а не Integer. Предположение, что указанный тип будет иметь и переменная перед запятой, является очень частой логической ошибкой при которой компилятор не выводит никакого сообщения. Такую ошибку обычно совершают программисты знающие другие языки программирования. Например, в C++ после типа можно перечислить сразу несколько переменных через запятую:

int x, y, z;

Все три переменные в C++ будут иметь тип int (целое число). Если в VBA написать:

Dim x, y, z As Integer

то только переменная z будет иметь тип Integer. Чтобы все переменные имели тип Integer нужно указать тип данных после каждой переменной:

Dim x As Integer, y As Integer, z As Integer

Необязательное ключевое слово New может использоваться при объявлении объектной переменной. В этом случае экземпляр класса создается неявным образом при первом обращении к объекту, поэтому сохранять ссылку с помощью оператора Set не нужно.

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

Если переменная не объявлена в программе с помощью оператора Dim или при объявлении тип не указан явно, то переменная по умолчанию будет иметь тип Variant. Это поведение можно изменить с помощью следующих операторов:

DefBool <Диапазон1>[, ..., <ДиапазонN>]     ' Тип Boolean
DefByte <Диапазон1>[, ..., <ДиапазонN>]     ' Тип Byte
DefInt  <Диапазон1>[, ..., <ДиапазонN>]     ' Тип Integer
DefLng  <Диапазон1>[, ..., <ДиапазонN>]     ' Тип Long
DefSng  <Диапазон1>[, ..., <ДиапазонN>]     ' Тип Single
DefDbl  <Диапазон1>[, ..., <ДиапазонN>]     ' Тип Double
DefCur  <Диапазон1>[, ..., <ДиапазонN>]     ' Тип Currency
DefDate <Диапазон1>[, ..., <ДиапазонN>]     ' Тип Date
DefStr  <Диапазон1>[, ..., <ДиапазонN>]     ' Тип String
DefObj  <Диапазон1>[, ..., <ДиапазонN>]     ' Тип Object
DefVar  <Диапазон1>[, ..., <ДиапазонN>]     ' Тип Variant

Все эти операторы должны быть расположены в самом начале модуля.

Параметр <Диапазон> задает начальную букву в имени переменной или диапазон букв (например, X-Z). Все необъявленные переменные, начинающиеся с этих букв, по умолчанию будут иметь указанный тип данных, а не тип Variant. Укажем, что переменные, начинающиеся с буквы I, должны иметь тип Integer:

DefInt I

Теперь зададим для переменных, имена которых начинаются с букв A, X, Y и Z, тип Double:

DefDbl A, X-Z

При указании диапазона A-Z устанавливается тип для переменных, имена которых начинаются не только с букв от A до Z, но и для имен, начинающихся с букв национальных алфавитов, например, с русских букв.

Существует еще один способ указать тип данных. Для этого после имени переменной задаются следующие специальные символы:

Пример указания типа Integer для переменной x:

x% = 10

С одной стороны хорошо, что переменной можно пользоваться вообще без объявления, но это может стать причиной множества ошибок. Например, при наборе имени переменной программист по ошибке ввел неправильную букву. В результате будет создана новая переменная и никакого сообщения об ошибке программист не увидит, а вот результат выполнения программы станет некорректным. Чтобы избежать головной боли следует обязательно объявлять переменные явным образом. Контроль за соблюдением этого правила можно возложить на компилятор, добавив в начале модуля следующую инструкцию:

Option Explicit

При наличии инструкции компилятор производит проверку объявления всех переменных. Если переменная не была объявлена явным образом, то компилятор выведет сообщение об ошибке и выполнение программы будет остановлено.

Предыдущая статья Все статьи Следующая статья