Общие сведения об области и видимости

Область действия определяет, может ли переменная, константа или процедура использоваться в другой процедуре. Область действия бывает на трех уровнях: процедуры, модуля Private и модуля Public.

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

Область на уровне процедуры

Переменная или константа, определенные в процедуре, не видны за ее пределами. С переменной может работать только процедура, которая содержит объявление этой переменной. Далее показан пример, в котором первая процедура отображает окно сообщения, содержащее текст. Во второй процедуре отображается пустое окно сообщения, так как переменная является локальной для первой процедуры.

Sub LocalVariable() 
 Dim strMsg As String 
 strMsg = "This variable can't be used outside this procedure." 
 MsgBox strMsg 
End Sub 
 
Sub OutsideScope() 
 MsgBox strMsg 
End Sub

Область на уровне частного модуля

Переменные и константы на уровне модуля можно определить в разделе Объявления модуля. Переменные уровня модуля могут быть общедоступными или частными. Общедоступные переменные доступны всем процедурам во всех модулях проекта; частные переменные доступны только для процедур в этом модуле. По умолчанию переменные, объявленные с помощью инструкции Dim в разделе Объявления, относятся к области как закрытые. Тем не менее, если перед переменной с ключевым словом Private , область становится очевидной в коде.

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

' Add following to Declarations section of module. 
Private strMsg As String 
 
Sub InitializePrivateVariable() 
 strMsg = "This variable can't be used outside this module." 
End Sub 
 
Sub UsePrivateVariable() 
 MsgBox strMsg 
End Sub

Примечание.

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

Область на уровне общедоступного модуля

Если переменная уровня модуля объявлена как общая (Public), то она доступна для всех процедур в проекте. В следующем примере строковая переменная может использоваться любой процедурой в любом модуле проекта.

' Include in Declarations section of module. 
Public strMsg As String 

По умолчанию все процедуры являются общими; исключение составляют процедуры событий. Когда Visual Basic создает процедуру события, ключевое словоPrivate автоматически вставляется перед объявлением процедуры. Для всех остальных процедур необходимо явно объявить процедуру с помощью ключевого слова Private , если вы не хотите, чтобы она была общедоступной.

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

Открытые процедуры, переменные и константы, определенные не в стандартных модулях или модулях класса, таких как модули формы или модули отчетов, недоступны для ссылок на проекты, так как эти модули являются частными для проекта, в котором они находятся.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.