Неявное объявление переменной
Переменная может быть объявлена неявно при первом появлении слева от оператора присваивания. Тогда ее тип определяется автоматически как Variant. Это опасное объявление. Variant может изменять свой тип в зависимости от содержимого. Например:
Dim V As Variant V=”25” ‘V содержит “25” (String)
V = V + 5 ‘V содержит 30 (число)
V=V & ”штук” ‘V содержит “30 штук” (String)
Для определения типа данных используется функция VBA TypeName. Приведем пример процедуры, где все время меняется тип переменной, а мы отслеживаем эти изменения.
Sub VariantDemo
MyVar = “123”
MsgBox TypeName(MyVar)
MyVar = MyVar / 2
MsgBox TypeName(MyVar)
MyVar = “Ответ” ‘ MyVar
MsgBox TypeName(MyVar)
MsgBox MyVar
End Sub
Чтобы запретить неявное объявление переменных, следует выполнить команду меню Tools/Options... и на вкладке Editor установить опцию Require Variable Declaration. В результате в начало всех вновь создаваемых компонент (формы, модули, классы) автоматически вставляется строка Option Explicit. Но это не выполняется для созданных ранее компонент. Для решения этой проблемы необходимо вручную добавить строку Option Explicit в начало всех существующих форм, модулей или классов.
Лучше всего применять правило. Чтобы запретить неявное объявление переменных, текст программы VBA нужно начинать со строки:
Option Explicit
Объявление переменных предоставляет два основных преимущества:
1) программы работают быстрее и используют память более эффективно;
2) это позволяет избежать ошибок, связанных с неправильным введением имен переменных.
Устаревшие правила объявления переменных
Эти правила поддерживаются в VBA, но считаются устаревшими, и применять их не рекомендуется.
Наследие старых версий языка Basic – добавление в конце имени переменной специального символа объявления типа, например, Count%.
% Integer & Long ! Single
# Double @ CVurrency $ String
Оператор DefType используется для явного объявления типа переменных, начинающихся с заданных букв. Например, DefLng I-N объявляет длинными целыми (4 байта) все переменные, начинающиеся с букв от I до N.
Используются следующие операторы (по типам переменных):
DefBool DefByte DefInt DefLng DefSng DefDbl
DefDec DefDate DefCur DefStr DefObj DefVar
Область действия переменных
Область действия характеризует доступность переменных, или область видимости переменных. В VBA используется три уровня видимости:
Процедура (программа) – локальная переменная, только в текущем макросе, процедуре или функции;
Модуль – контейнерная переменная, только в текущей форме, модуле или классе (модуль может содержать несколько процедур или функций);
Проект или общий уровень – глобальная переменная.
Чтобы объявить локальную переменную, для одного макроса, процедуры или функции, надо вставить оператор Dim после оператора Sub или Function перед кодом программы.
Чтобы объявить контейнерную переменную, доступную во всех проолграммах модуля, надо ее объявить с ключевым словом Dim или Private перед первой программой в модуле.
Чтобы объявить глобальную переменную, доступную во всех модулях проекта, надо ее объявить с ключевым словом Public перед первой процедурой в модуле. Более того, этот оператор должен находиться в стандартном модуле VBA, а не в модуле листа или формы.
