Em todas as linguagens de programação, temos especificadores de acesso à variável que definem de onde uma variável definida pode ser acessada. O Excel VBA não é exceção. O VBA também tem especificadores de escopo. Esses especificadores de escopo podem ser usados para definir a visibilidade / escopo de uma variável no Excel VBA.
No Excel VBA, temos três tipos de especificadores de escopo:
- Nível de Procedimento
- Privado - Nível de Módulo
- Público - Nível de Projeto
Escopo de Variável de Nível de Procedimento VBA
As variáveis que são declaradas dentro de uma sub-rotina, podem ser acessadas somente naquele procedimento / função. Eles têm um escopo de nível de procedimento. Eles geralmente são declarados com a palavra-chave Dim. Se o módulo for uma opção implícita, então a variável pode não ter sido declarada, apenas usada diretamente.
No exemplo abaixo, temos um teste de escopo de sub-rotina que possui as variáveis x e y. Quando executamos a primeira sub-rotina, ela funciona perfeitamente e imprime a soma de X e Y
Option Explicit Sub scopeTest () Dim x, y como inteiro 'Variável de nível de procedimento em VBA x = 2 y = 3 Debug.Print x + y End Sub sum () x = 5 y = 7 Debug.Print x + y End Sub
Mas quando você executa a soma da subrotina, ocorre um erro de que a variável não foi declarada. Porque? Porque X e Y são privados para o procedimento scopeTest e subroutine sum não tem acesso a eles. Portanto, o substituto comete um erro.
Variável privada VBA - Escopo de nível de módulo
Quando você deseja declarar uma variável que precisa ser acessada em todo o módulo, então você declara essa variável como privada no topo do módulo, antes de qualquer sub-rotina ou função.
As variáveis declaradas antes de qualquer sub-rotina, no módulo, são por padrão Privadas. Mesmo que você os declare com a palavra-chave Dim. Mas, para ser específico, é aconselhável usar a palavra-chave Private.
Os dois procedimentos a seguir estão no mesmo módulo, módulo 1.
Option Explicit 'Variável de nível de módulo em VBA. Ambas as variáveis xey são privadas para este módulo. e 'podem ser acessados de qualquer sub ou função dentro deste módulo. Dim x As Integer Privado y As Integer Sub scopeTest () 'Pode ser acessado de qualquer módulo no projeto x = 2 y = 3 Debug.Print x + y End Sub Sub-soma privada () 'Não pode ser acessado de outros módulos x = 5 y = 7 Debug.Print x + y End Sub
As duas funções acima funcionarão perfeitamente bem, pois as variáveis xey são as variáveis privadas para este módulo.
Importante: Os últimos valores armazenados em xey são retidos até no módulo inteiro. Se executarmos o sub scopeTest primeiro e não inicializarmos os valores de x e y na sub soma e executá-lo, o valor inicial de x e y não será alterado.
A sub-rotina abaixo é definida em um módulo separado, módulo 2. Quando tento acessar a variável de outro módulo, o procedimento (ou função) do VBA apresenta um erro.
Mas se eu tentar chamar a sub-rotina soma do módulo 1 no módulo 2, isso funciona perfeitamente. Para tornar sua função e sub-rotinas privadas para o módulo, use a palavra-chave Private antes da sub e função.
Observação:- As variáveis declaradas antes de qualquer sub-rotina ou função, em um módulo são privadas para o módulo por padrão. Você pode usar o Privadopalavra-chave. Mas as funções e sub-rotinas são públicas por padrão e podem ser acessadas por qualquer módulo em um projeto. Para tornar funções e sub-rotinas privadas para o módulo, você deve usar a palavra-chave Private.
Variáveis públicas - Escopo em nível de projeto
Como aprendemos nos exemplos acima, a função e as sub-rotinas são públicas por padrão e podem ser acessadas de qualquer módulo, mas as variáveis não. Para tornar uma variável acessível a partir de qualquer módulo no Excel VBA,usamos palavra-chave pública.
Para declarar uma variável pública em um projeto, você as declara no topo do módulo, antes de qualquer função ou sub-rotina com a palavra-chave public. O código a seguir foi escrito no módulo 1.
Option Explicit 'Variável de nível de projeto em VBA. Público x como inteiro Público y como inteiro Public Sub scopeTest () 'Pode ser acessado de qualquer módulo do projeto x = 2 y = 3 End Sub Private Sub sum ()' Não pode ser acessado de outros módulos x = 5 y = 7 Debug.Print x + y End Sub
E esta sub-rotina está em outro módulo, módulo 2.
Option Explicit Sub mul () Chamar scopeTest 'Call sum' não funcionará porque é privado para o módulo 1 Debug.Print x * y End Sub
Desta vez, ele funciona perfeitamente.
Primeiro, chamei a sub-rotina de scopeTest. Como o scopeTest é público, ele é chamado. Ele inicializa os valores de x e y. Em seguida, multiplicamos x e y. Como a sub-rotina scopeTest a inicializou com os valores 2 e 3, o resultado que obtemos é 6.
Então, sim pessoal, é assim que você pode usar os especificadores de escopo de variável no Excel para controlar a visibilidade de variáveis, funções e sub-rotinas em projetos VBA do Excel.
Tentei explicar os especificadores de acesso do VBA da maneira mais simples que pude. Espero que tenha sido explicativo. Se você tiver alguma dúvida sobre este artigo ou qualquer outra dúvida relacionada ao VBA, pergunte-me na seção de comentários abaixo. Terei o maior prazer aqui de você.
Argumentos ByRef e ByVal | Quando um argumento é passado como um argumento ByRef para uma subfunção ou função diferente, a referência da variável real é enviada. Quaisquer alterações feitas na cópia da variável, serão refletidas no argumento original.
Exclua planilhas sem prompts de confirmação usando VBA no Microsoft Excel | Como você está excluindo planilhas usando VBA, você sabe o que está fazendo. Você gostaria de dizer ao Excel para não mostrar este aviso e excluir a maldita planilha.
Adicionar e salvar nova pasta de trabalho usando VBA no Microsoft Excel 2016 | Neste código, primeiro criamos uma referência a um objeto de pasta de trabalho. E então o inicializamos com um novo objeto de pasta de trabalho. A vantagem dessa abordagem é que você pode realizar operações nesta nova pasta de trabalho facilmente. Como salvar, fechar, excluir, etc.
Exibir uma mensagem na barra de status do Excel VBA A barra de status no Excel pode ser usada como um monitor de código. Quando seu código VBA é longo e você executa várias tarefas usando o VBA, geralmente desativa a atualização da tela para não ver a tela piscando
Desativar mensagens de aviso usando VBA no Microsoft Excel 2016 | Este código não apenas desativa alertas VBA, mas também aumenta a eficiência de tempo do código. Vamos ver como.
Artigos populares:
50 atalhos do Excel para aumentar sua produtividade | Torne sua tarefa mais rápida. Esses 50 atalhos farão você trabalhar ainda mais rápido no Excel.
A função VLOOKUP no Excel | Esta é uma das funções mais usadas e populares do Excel, que é usada para pesquisar valores em diferentes intervalos e planilhas.
CONT.SE no Excel 2016 | Conte valores com condições usando esta função incrível. Você não precisa filtrar seus dados para contar um valor específico. A função Countif é essencial para preparar seu painel.
Como usar a função SUMIF no Excel | Esta é outra função essencial do painel. Isso ajuda você a somar valores em condições específicas.