Представьте себе следующую ситуацию. Вы решили не использовать оператор OptionExplicit в своем модуле. Но вот где-то в глубине процедур в результате случайной незамеченной неточности движения пальцев вы ошибаетесь при печатании имени одной из своих переменных. Когда компилятор VBA дойдет до строки с этой опечаткой, он подумает, что здесь вы просто вводите в оборот новую переменную, и любезно создаст ее для вас. В результате ваша программа может и будет выполняться, но не удивляйтесь, если вдруг выводимый на экран текст окажется ярко-красным или программа сообщит, что население Земли достигло 12 человек.
Наверное, к этому моменту я вас уже убедил, что оператор Option Explicit должен присутствовать в каждом создаваемым вами модуле. Но если это так, то зачем этот оператор печатать каждый раз вручную? Это делать совсем не обязательно. Выберите Tools=Options из меню и в появившемся диалоговом окне Options (Параметры) на вкладке Editor (Редактор) установите флажок Require Variable Declaration (Требовать объявление переменных). После этого редактор Visual Basic будет автоматически вставлять оператор Option Explicit в каждый новый модуль. В старые модули, где такого оператора не было, вам придется впечатать его самим.
Задание области видимости переменной
Область видимости переменной (т.е. та часть программы, в рамках которой данная переменная доступна) зависит от следующих двух взаимосвязанных факторов:
* места объявления переменной (либо внутри процедуры, либо в разделе объявлений модуля; см. выше раздел Где объявлять переменные);
* ключевого слова, использованного в объявлении переменной (Dim, Public, Private или Static ).
Если переменная объявлена внутри процедуры с помощью ключевого слова Dim, то такую переменную можно использовать только внутри этой процедуры. В других частях программы VBA переменную не распознает. А вот переменные, объявленные с помощью Dim в разделе объявлений модуля, будут доступны из любой части модуля, но не из других модулей.
По умолчанию переменные локальны
Ключевое слово Private работает точно так же, как и Dim. Например, следующие два оператора объявления функционально идентичны:
Private strLouie As String
Dim strLouie As String
Ввиду того, что ключевые слова Private и Dim работают одинаково, вы можете вообще не использовать, например, Private. А можно использовать только Private, если вы хотите, чтобы это ключевое слово напоминало о том, что переменная достижима только в рамках данной процедуры или модуля.
Объявление переменной с помощью ключевого слова Public делает эту переменную доступной из любой части проекта. Например: