Noções básicas sobre escopo e visibilidade

Escopo refere-se à disponibilidade de uma variável, constante ou procedimento para uso por outro procedimento. Há três níveis de escopo: nível de procedimento, nível de módulo privado e nível de módulo público.

Você determina o escopo de uma variável ao declará-la. É uma boa ideia declarar todas as variáveis explicitamente para evitar erros de nomenclatura de conflito entre variáveis com escopos diferentes.

Escopo no nível do procedimento

Uma variável ou constante definida dentro de um procedimento não está visível fora desse procedimento. Somente o procedimento que contém a declaração de variável pode usá-la. No exemplo a seguir, o primeiro procedimento exibe uma caixa de mensagem que contém uma cadeia de caracteres. O segundo procedimento exibe uma caixa de mensagem em branco porque a variável é local para o primeiro procedimento.

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

Escopo de nível de módulo privado

Você pode definir variáveis e constantes no nível do módulo na seção Declarações de um módulo. As variáveis no nível do módulo podem ser públicas ou privadas. As variáveis públicas estão disponíveis para todos os procedimentos em todos os módulos de um projeto; Variáveis privadas estão disponíveis apenas para procedimentos nesse módulo. Por padrão, as variáveis declaradas com a instrução Dim na seção Declarações são escopo como privadas. No entanto, ao preceder a variável com a palavra-chave Privada , o escopo é óbvio em seu código.

No exemplo a seguir, a variável strMsg de cadeia de caracteres está disponível para todos os procedimentos definidos no módulo. Quando o segundo procedimento é chamado, ele exibe o conteúdo da variável strMsg de cadeia de caracteres em uma caixa de diálogo.

' 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

Observação

Procedimentos públicos em um módulo padrão ou módulo de classe estão disponíveis para qualquer projeto de referência. Para limitar o escopo de todos os procedimentos em um módulo ao projeto atual, adicione uma instrução Módulo Privado de Opção à seção Declarações do módulo. Variáveis e procedimentos públicos ainda estarão disponíveis para outros procedimentos no projeto atual, mas não para referenciar projetos.

Escopo de nível de módulo público

Se você declarar uma variável no nível do módulo como pública, ela estará disponível para todos os procedimentos do projeto. No exemplo a seguir, a variável de cadeia de caracteres pode ser usada por qualquer procedimento em qualquer módulo do projeto.

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

Todos os procedimentos são públicos por padrão, exceto para procedimentos de evento. Quando o Visual Basic cria um procedimento de evento, a palavra-chavePrivada é inserida automaticamente antes da declaração do procedimento. Para todos os outros procedimentos, você deve declarar explicitamente o procedimento com a palavra-chave Privada se não quiser que ele seja público.

Use procedimentos públicos, variáveis e constantes definidos em módulos padrão ou módulos de classe de projetos de referência. No entanto, primeiro você deve definir uma referência ao projeto no qual elas são definidas.

Procedimentos públicos, variáveis e constantes definidos em outros módulos padrão ou de classe, como módulos de formulário ou módulos de relatório, não estão disponíveis para referenciar projetos, pois esses módulos são privados para o projeto em que residem.

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.