Tudo sobre como declarar VARIÁVEIS no VBA Excel
Sabendo que, o objetivo principal do VBA é manipular dados que são geralmente armazenados na memória do computador, esta postagem do blog se concentra em explicar como declarar variaveis, que nada mais é do que um local destinado a armazenar esses dados.
As variáveis são frequentemente usadas ao trabalhar com o VBA. De fato, elas são usadas em quase todos os programas de computador, até mesmo em programas mais curtos como macros.
Para declarar variáveis no VBA, é necessário entender o básico da programação. A falta de conhecimento pode levar a práticas inadequadas de codificação. E as más práticas de codificação podem levar a possíveis problemas futuros. Esses problemas podem causar grandes dores de cabeça durante o processo. Então, vou ajudá-lo a evitar dores de cabeça, e fazer com que você aprenda de uma vez por todas como lidar com variáveis no VBA!
Nesta postagem, explico os aspectos mais importantes que envolvem a declaração de variáveis. O guia é dividido nas seguintes seções:
- O que é uma variável VBA
- Por que devemos declarar variáveis no VBA
– Razão nº 1: declarar variáveis permite usar o recurso AutoCompletar
– Razão nº 2: declarar variáveis faz com que o VBA execute verificação adicional de erros
– Razão nº 3: declarar variáveis melhora a legibilidade do código, facilita a depuração e reduz o risco de ocorrer erros
- Como lembrar de declarar variáveis
– Etapa 1: abrindo a caixa de diálogo Opções
– Etapa 2: habilitando a opção “Exigir declaração variável”
- Como declarar uma variável no VBA
– Como declarar uma variável Dim
– Como declarar uma variável Static
– Como declarar uma variável Private e Public
- Como determinar o escopo de uma variável VBA
– Escopo nº 1: variáveis VBA em nível de procedimento (ou local)
– Escopo nº 2: variáveis VBA em nível de módulo (também conhecidas como Private)
– Escopo nº 3: variáveis Public VBA
- Qual a vida útil de uma variável VBA e como ela é determinada
- Como nomear variáveis VBA
- Como atribuir um valor ou expressão a uma variável VBA
- Conclusão
Sendo assim, vamos começar dando uma olhada detalhada em…
O que é uma variável VBA
Uma variável, nada mais é do que um local de armazenamento emparelhado com um nome, usado para representar um valor específico. Elas são ótimas para armazenar e manipular dados.
Essa definição pode ser estendida ainda mais, por meio das 3 caracteristicas abaixo:
- É um local de armazenamento na memória do computador.
- É usado por um programa.
- Tem um nome.
Por sua vez, essas três características principais das variáveis fornecem uma boa idéia do que você precisa entender para poder declarar variáveis adequadamente no VBA.
Eu explico cada uma das 3 caracteristicas abaixo.
Por que devemos declarar variáveis no VBA
Antes de explicar alguns dos motivos mais comuns para apoiar a idéia de que você deve declarar suas variáveis ao trabalhar com o VBA, vamos começar entendendo o que realmente estamos fazendo ao declarar uma variável.
Quando declaramos uma variável estamos dizendo ao computador para reservar espaço na memória para uso posterior da mesma.
Existem algumas razões para criar o hábito de declarar as variáveis. A seguir, são apresentados os principais pontos que explicam porque devemos nos acostumar a declarar variáveis ao trabalhar com VBA:
- Os tipos de dados VBA determinam a maneira como os dados são armazenados na memória do computador.
- Deve-se determinar o tipo de dado de uma variável VBA específica ao declará-la. Caso você declare, o VBA lidará com os detalhes.
- Se você não declarar o tipo de dados para uma variável, o VBA utilizará o tipo de dado padrão: Variant.
- Apesar de ser mais flexível que outros tipos de dados, confiar sempre na Variant tem algumas desvantagens. Alguns desses problemas incluem uso ineficiente de memória e execução mais lenta de aplicativos VBA. Por isso, ao declarar variáveis deve ser informado o tipo de dados da variável.
Volto a dizer que, declarar variáveis torna a macro mais rápida!
Mesmo que o motivo acima seja provavelmente a razão pelo qual se deve sempre declarar variáveis no VBA, ele não é o único! Vamos dar uma olhada em outros motivos pelos quais devemos declarar variáveis ao trabalhar com o VBA:
Razão nº 1: declarar variáveis permite usar o recurso AutoCompletar
Observe o código VBA apresentado abaixo. Esta é a primeira seção de um procedimento Sub VBA, pela qual eu dei o nome de Variavel_Teste (poderia ser qualquer outro nome).
Sub Variavel_Teste ()
Dim Variavel_teste1 As Variant Dim Variavel_teste2 As Variant Variavel_teste1 = 10 Variavel_teste2 = 100
As próximas instruções, depois dessas que aparecem acima, são:
MsgBox "O valor da primeira variável é" & Variavel_teste1 & _Chr (13) & “O valor da segunda variável é” & Variável_teste2
Imagine que você esteja digitando essas instruções e esteja atualmente no seguinte ponto:
Sub Variavel_Teste ()
Dim Variavel_teste1 As Variant Dim Variavel_teste2 As Variant Variavel_teste1 = 10 Variavel_teste2 = 100 MsgBox "O valor da primeira variável é" & Variavel ... |
Teoricamente, você deve digitar o nome inteiro da variável: “Variavel_teste1”. No entanto, declarar a variável anteriormente permite tirar proveito de um atalho de teclado: “Ctrl + Espaço”. Depois de digitar as primeiras letras do nome de uma variável já declarada, é possível apenas pressionar “Ctrl + Espaço” e o Editor do Visual Basic executa um dos seguintes procedimentos:
- Como regra geral, o VBA conclui a entrada.
- Se houver mais de uma opção disponível, o Editor do Visual Basic exibirá uma lista de possíveis correspondências para concluir a entrada.
No caso acima, usar o atalho “Ctrl + Espaço” resulta na exibição de uma lista de possíveis opções para completar o código. Isso é mostrado na imagem a seguir.
Observe nas opções acima, que além de Variavel_teste1 e Variavel_teste2, aparecem também outras palavras e funções reservadas pelo VBA. Isso ocorre porque o mesmo atalho de teclado (“Ctrl + Espaço”) funciona igualmente para esses dois outros elementos.
Agora, suponha que o atalho “Ctrl + Espaço” foi pressionado no seguinte ponto:
Sub Variavel_Teste ()
Dim Variavel_teste1 As Variant Dim Variavel_teste2 As Variant Variavel_teste1 = 10 Variavel_teste2 = 100 MsgBox "O valor da primeira variável é" & Variavel_t ...|
Nesse caso, o Editor do Visual Basic conclui a entrada. Observe:
Sub Variavel_Teste ()
Dim Variavel_teste1 As Variant Dim Variavel_teste2 As Variant Variavel_teste1 = 10 Variavel_teste2 = 100 MsgBox "O valor da primeira variável é" & Variavel_teste1 ...|
Razão nº 2: declarar variáveis faz com que o VBA execute verificação adicional de erros
Alguns erros no VBA podem ser muito difíceis de detectar, principalmente em aplicativos VBA grandes ou complexos.
Ao declarar suas variáveis e definir o tipo de dados, você obtém ajuda adicional do VBA. A razão para isso, é que, quando se declara explicitamente o tipo de dados das variáveis, o VBA pode executar alguma verificação de erro no estágio de compilação.
O tipo de erro mais comum são os de digitação de dados. Esses erros são causados pela atribuição incorreta de informações a uma variável específica. Mais precisamente, isso geralmente ocorre quando a atribuição resulta em uma incompatibilidade entre:
- O tipo de dados da variável; e
- O tipo dos dados atribuídos à variável.
Temos alguns exemplos de como isso pode ocorrer:
- Declara-se uma variável Integer ou Byte, mas tenta-se atribuir uma string a ela.
Os tipos de dados Integer e Byte foram projetados para armazenar números inteiros, não seqüências de caracteres.
- Declara-se uma variável booleana, mas tenta-se atribuir um número inteiro “grande” a ela.
Variáveis do tipo de dados booleano podem ser definidas apenas para os 2 valores booleanos (TRUE e FALSE), que significa em português as condições de VERDADEIRO ou FALSO.
declarar variáveis no VBA, permite obter esses tipos de erros o mais rápido possível depois que a variável recebe um tipo de dados inesperado.
Razão nº 3: declarar variáveis melhora a legibilidade do código, facilita a depuração e reduz o risco de ocorrer erros
Quando declarado variáveis no VBA, geralmente elas são postas no início de um módulo ou procedimento. Isso melhora a legibilidade do código. Além disso, é importante declarar variáveis para reduz a incidência de erros de conflito de nomenclatura e ortografia.
Erros de conflito de nomenclatura são bastante perigosos. Se você não declarar variáveis do VBA, existe a possibilidade de ocorrer riscos maiores quanto sobrescrever ou eliminar acidentalmente uma variável preexistente ao tentar criar uma nova.
Erros de ortografia também podem criar grandes problemas, colocando em maiúsculas todas as letras minúsculas ou vice versa.
Para ver como isso funciona, pegaremos como exemplo o código VBA para a macro Variavel_Teste. Neste caso, suponhamos o nome de Variavel_teste1 seja digitado como mostrado abaixo:
Sub Variavel_Teste ()
Dim Variavel_teste1 As Variant Dim Variavel_teste2 As Variant variavel_teste1
Depois de concluir a declaração, o Editor do Visual Basic coloca automaticamente em maiúscula as letras apropriadas. Como mostrado abaixo:
Sub Variavel_Teste ()
Dim Variavel_teste1 As Variant Dim Variavel_teste2 As Variant Variavel_teste1 = 10
Sugeriro, por exemplo, criar o hábito de (i) usar algumas letras maiúsculas nos nomes de variáveis, mas (ii) digitar o corpo do seu código apenas com letras minúsculas. Se o Editor do Visual Basic não colocar com letra maiúscula um nome de variável após a digitação, você pode ter digitado o nome incorretamente.
A propósito, o Excel faz essa capitalização automática para todas as palavras-chave, não apenas para variáveis VBA.
Todas as vantagens listadas na Razão nº 3 estão, finalmente, relacionadas ao fato de que a declaração de variável nos ajuda ter uma idéia de quais variáveis existem em um determinado momento. Isso porque, quando não declarado variáveis, não se sabe ao certo sua disponibilidade para uso.
Como lembrar de declarar variáveis
O VBA possui uma instrução específica que o força a declarar quaisquer variáveis. É chamada de instrução Option Explicit.
Sempre que a instrução Option Explicit for encontrada em um módulo, o usuário será impedido de executar o código VBA contendo variáveis não declaradas. Isso porque, ela precisa ser usar apenas uma vez por módulo, isto é, se o mesmo estiver trabalhando em um projeto VBA específico que contenha mais de 1 módulo, o ideal é ter 1 instrução Option Explicit em cada um desses módulos.
Incluir a instrução Option Explicit em um módulo é bastante simples:
Basta digitar “Option Explicit” no início do módulo antes de declarar qualquer procedimento. Como na imagem abaixo:
Depois de incluir a instrução Option Explicit em um módulo, o VBA não executa um procedimento dentro desse módulo, a menos que todas as variáveis desse procedimento sejam declaradas. Se você tentar chamar esse procedimento, o Excel exibirá a seguinte mensagem de erro em tempo de compilação:
Além dos motivos apresentados acima para apoiar a ideia de que você deve declarar suas variáveis VBA, há uma vantagem adicional ao usar a instrução Option Explicit e ter que declarar absolutamente todas as suas variáveis:
O Editor do Visual Basic revisa automaticamente a ortografia dos nomes de variáveis do VBA.
Vamos ver exatamente o que quero dizer com um exemplo prático:
Voltando à macro Variavel_Teste apresentada inicialmente. A captura de tela a seguir mostra o procedimento Sub completo:
Sub Variavel_Teste ()
Dim Variavel_teste1 As Variant Dim Variavel_teste2 As Variant Variavel_teste1 = 10 Variavel_teste2 = 100 MsgBox "O valor da primeira variável é" & Variavel_teste1 & _ Chr(13) & "O valor da segunda variável é" & Variavel_teste2
End Sub
Observe como as variáveis Variavel_teste1 e Variavel_teste2 são declaradas no início do procedimento. Abaixo eu explico passo a passo de como essas variaveis podem ser declaradas.
Veja como cada uma dessas variáveis aparecem 2 vezes após serem declaradas:
Assumindo que, ao escrever o código VBA tenha-se digitado errado nome da variável Variavel_teste1, o código da macro Variavel_Teste fica da seguinte maneira:
Esses pequenos erros de ditação podem ser difíceis de detectar em determinadas situações. É fato, que se você não perceber esses tipos de erros nos nomes de variáveis, o Excel interpretará as diferentes grafias como variáveis diferentes (por exemplo, Variavel_teste1 e Variavel_test1). Como consequencia, o Excel cria uma nova variável usando o nome incorreto. Portanto, fique atento!
Quando o nome de uma variável é digitada incorretamente enquanto a instrução Option Explicit está ativada, o Excel avisa o usuário sobre a situação ocorrida. A imagem a seguir mostra a mensagem de erro que é exibida quando se tenta executar a macro Variavel_Teste com o erro de digitação mostrado acima. Observe como o Editor do Visual Basic age nessa situação:
- Informa claramente que há uma variável indefinida.
- Destaca o elemento do código VBA onde se encontra o erro.
A instrução Option Explicit não está ativada por padrão. Isso significa que, se você quiser usá-la sempre será necessário ativá-la para cada módulo criado.
No entanto, o Editor do Visual Basic é altamente personalizável. Uma das personalizações possíveis de se fazer é exigir que as variáveis sejam declaradas. Ele faz isso inserindo automaticamente a instrução Option Explicit no início de qualquer módulo VBA. Se desejar que o Editor do Visual Basic insira a instrução Option Explicit em todos os módulos , siga as 2 etapas abaixo:
Etapa 1: abrir a caixa de diálogo Opções
É possível acessar a caixa de diálogo Opções do Editor do Visual Basic clicando no menu Ferramentas e selecionando “Opções …”.
Etapa 2: Habilite “Exigir declaração variável”
O Editor do Visual Basic deve exibir a guia Editor da caixa de diálogo Opções por padrão. Caso contrário, basta clicar na guia relevante na parte superior da caixa de diálogo.
Na guia Editor, ative a opção “Exigir declaração variável” marcando a caixa ao lado. Em seguida, clique no botão OK no canto inferior direito da caixa de diálogo para concluir a operação.
Observe que a ativação da opção “Requerer declaração variável” se aplica apenas aos módulos futuros.Ou seja, esta opção não insere a instrução Option Explicit em módulos existentes anteriormente que foram criados enquanto a opção não estava ativada.
Como declarar uma variável no VBA
A maneira mais comum de declarar uma variável é usando a instrução Dim.
Já vimos esse tipo de instrução na macro Variavel_Teste. Nesse caso específico, o “Dim” foi usado para declarar as variáveis Variavel_teste1 e Variavel_teste2 da seguinte maneira:
Dim Variavel_teste1 As Variant Dim Variavel_teste2 As Variant
Ambas as variáveis estão sendo declaradas como sendo do tipo de dados Variante.
Existem outras 3 palavras-chave (além de Dim) que podem ser usadas para declarar esclusivamente uma variável VBA:
- Static
- Public
- Private
Geralmente se usa as três instruções mensionadas acima para declarar variáveis com características especiais em relação ao escopo da programação.
Independentemente da palavra-chave usada para declarar uma variável, a estrutura básica não muda. É sempre a mesma, como apresentada abaixo:
- Nome da variável da palavra-chave como tipo de dados
Nesta estrutura:
- “Palavra-chave” é uma das instruções: Dim, Static, Public ou Private.
Mais adiante, explico quando é apropriado o uso de cada uma delas.
- “Nome da variável” é o nome que deseja atribuir à variável.
Explico como nomear variáveis VBA abaixo.
A questão de qual palavra-chave deve ser usada para declarar uma variável específica no VBA depende, principalmente, do escopo da variável. A tabela a seguir mostra o relacionamento entre as quatro instruções que pode ser usada para declarar uma variável VBA e os três escopos diferentes que uma variável pode ter:
Escopo da Variável | Possíveis palavras- chaves | Localização da variável declarada |
Apenas procedimento | Dim ou Static | Dentro do procedimento |
Apenas Módulo | Dim ou Private | Dentro do módulo e antes de qualquer procedimento |
Público | Public | Dentro do módulo e antes de qualquer procedimento |
As declarações Dim, Static, Private e Public são apresentadas nas seções a seguir.
Como declarar uma variável Dim
A instrução Dim é a maneira mais comum de declarar uma variável VBA.
Atualmente, no VBA a palavra-chave Dim é usada para declarar qualquer variável, independente de ser uma matriz ou não.
A imagem acima mostra a maneira mais básica pela qual se pode usar a instrução Dim para declarar variáveis VBA. No entanto, também é permitido usar uma única instrução Dim para declarar mais de uma variável. Nesses casos, usa-se vírgula para separa-las.
Veja como é possível declarar as variáveis que foram trabalhadas na macro Variavel_Teste ( ), usando uma única instrução Dim:
Dim Variavel_teste1 As Variant, Variavel_teste2 As Integer
Embora essa estrutura permita escrever menos linhas, ela torna o código menos legível. Portanto, não recomendo usa-la!
Independente de declarar variáveis VBA em linhas separadas ou em uma única linha, observe que não é possível declarar várias variáveis com um tipo de dados determinado, basta separar as variáveis por vírgula antes de declarar um tipo de dado.
Dim Variavel_teste1 , Variavel_teste2 As Integer
Neste caso, apenas uma variavél (Variavel_teste2) está sendo declarada como um Inteiro. Para a Variavel_teste1, o código não declara o seu tipo de dado. Portanto, o VBA usa o tipo padrão: Variant.
Como declarar uma variável Static
O Static é usado para declarar variáveis VBA como uma alternativa à instrução Dim.
No entanto, neste momento, basta entender que as variáveis no nível do procedimento podem ser usadas apenas dentro do procedimento no qual elas são declaradas.
A principal diferença entre variáveis declaradas por Dim e Static, é o momento em que a variável é redefinida. Vamos dar uma olhada no que isso significa exatamente:
Como regra geral (quando declarada por Dim), todas as variáveis no nível do procedimento são redefinidas quando o procedimento relevante termina. Variáveis Static não são redefinidas; elas mantêm os valores entre as chamadas do procedimento.
As variáveis Static são redefinidas quando fechada a pasta de trabalho do Excel na qual elas estão armazenadas. Elas também são redefinidas (como explico abaixo) quando um procedimento é finalizado por uma instrução End.
Apesar do fato de as variáveis Static manterem seus valores após o término de um procedimento, isso não significa que seu escopo seja alterado. Portanto, suas características as tornam particularmente úteis para fins de armazenamento de dados referentes a um processo que precisa ser realizado mais de uma vez. Existem alguns cenários especiais em que isso é muito útil. Temos abaixo 2 bons exemplos que ilustram 2 dos principais usos de variáveis Static:
- Armazenamento de dados para um procedimento que deve ser executado mais tarde.
- Acompanhar um total em execução.
Vamos dar uma olhada rápida nestes 2 exemplos:
Exemplo 1: Alternando
É possível usar uma variável Static dentro de um procedimento que “alterna algo entre 2 estados”, como por exemplo o procedimento que ativa e desativa o itálico de uma determinada fonte.
Na primeira vez que o procedimento é chamado, o itálico é ativado. Na segunda execução, o itálico é desativado. Na terceira chamada, eles são ativados novamente. E assim por diante…
Exemplo 2: Contadores
De fato, uma variável Static pode ser útil para acompanhar o número de vezes que um determinado procedimento é executado. Sendo assim, é possível configurar o contador. Por exemplo:
- Declarando uma variável de contador como uma variável Static.
- Elevando o valor atribuído à variável Static toda vez que o procedimento é chamado.
Como declarar uma variável Private e Public
A instrução Private é usada para declarar variáveis no nível do módulo. Nesses casos, é uma alternativa ao uso do Dim. Explico o tópico das variáveis no nível do módulo com mais detalhes abaixo.
A quarta e última instrução possível de ser usada para declarar uma variável VBA é a Public. A instrução Public é usada para declarar variáveis públicas. Eu explico esse tipo de variável abaixo.
Vimos no início deste artigo que uma das características que define uma variável VBA é o fato de ela ser usada por um programa. Portanto, vamos dar uma olhada como se determina o programa, ou parte dele.
Como determinar o escopo de uma variável VBA
O escopo de uma variável VBA é o que determina quais módulos e procedimentos podem usar essa variável específica. Por isso, entender como se determinar o escopo de uma variável é muito importante:
- Um único módulo pode ter vários procedimentos.
- Uma única pasta de trabalho do Excel pode ter vários módulos.
Se você estiver trabalhando com aplicativos VBA relativamente simples, poderá ter apenas um módulo com alguns procedimentos. No entanto, à medida que seu trabalho com o VBA começa a se tornar mais complexo, isso pode mudar.
Você pode não querer que todas as variáveis do VBA estejam acessíveis a todos os módulos e procedimentos. Ao mesmo tempo, você deseja que elas estejam disponíveis para os procedimentos que realmente precisam delas. A determinação apropriada do escopo das variáveis do VBA permite que se faça isso.
Além disso, o escopo de uma variável tem implicações importantes em conexão com as outras características da variável. Um exemplo disso é a vida útil delas, que explicarei mais adiante.
Deem um olhada nos três principais escopos que pode ser aplicado:
Escopo nº 1: Variáveis VBA em nível de procedimento (ou local)
Esse é o escopo variável mais restrito.
Conforme está implícito no nome, as variáveis no nível do procedimento (também conhecidas como variáveis locais) podem ser usadas apenas dentro do procedimento que elas são declaradas. Isso se aplica por exemplo, ao procedimento Sub.
Quer dizer que, quando a execução de um procedimento específico termina, qualquer variável no nível do procedimento deixa de existir.
O fato do Excel liberar a memória usada pelas variáveis no nível do procedimento quando o procedimento termina, torna esse tipo de variável particularmente eficiente. Além disso, em macros típicas geralmente não há razão para justificar uma variável com um escopo mais amplo que o procedimento.
Este é um ponto importante: como regra geral, deve-se tornar as variáveis VBA o mais local possível. Ou seja, sempre limitar o escopo das variáveis ao nível em que se precisa delas.
O Excel não armazena os valores atribuídos às variáveis no nível do procedimento para uso ou acesso fora do procedimento relevante. Portanto, se for chamado o mesmo procedimento novamente, qualquer valor anterior a elas no nível de procedimento será perdido.
Variáveis Static (que explico acima) são, no entanto, uma exceção a essa regra. Elas geralmente retêm seus valores após o término do procedimento.
Vamos dar uma olhada em como se declara uma variável no nível de procedimento:
A maneira mais usual de declarar uma variável VBA é usando a instrução Dim. Esta regra geral se aplica a variáveis no nível do procedimento.
Pode-se usar também a instrução Static para declarar uma variável no nível do procedimento. Nesse caso, é usada a palavra-chave Static ao em vez de Dim. Geralmente usa-se a instrução Static ao em vez de Dim se precisar que a variável retenha seu valor assim que o procedimento for concluído.
A chave para criar um nível de procedimento variável está no local da instrução de declaração específica. Esta declaração deve estar dentro de um procedimento específico.
O bom senso e o costume recomendam declarar todas as variáveis no início do procedimento. Mais precisamente, o local mais comum para se declarar uma variável dentro de um procedimento é:
- Imediatamente após a declaração do procedimento.
- Antes do corpo principal das declarações do procedimento.
O código VBA da macro Variavel_Teste é um bom exemplo de como se deve declarar uma variável trabalhando a instrução Dim. Observe como a instrução Dim usada para declarar as duas variáveis (Variavel_teste1 e Variavel_teste2) está entre a instrução de declaração do procedimento Sub e o corpo principal das instruções:
Sub Variavel_Teste()
Dim Variavel_teste1 As Integer Dim Variavel_teste2 As Integer Variavel_teste1 = 10 Variavel_teste2 = 100 MsgBox "O valor da primeira variável é " & Variavel_teste1 & _ Chr(13) & "O valor da segunda variável é " & Variavel_teste2
End Sub
Como eu disse, colocar todas as declarações de variáveis VBA no início de um procedimento torna o código mais legível.
Como o escopo das variáveis VBA no nível do procedimento é limitado a um procedimento específico, é possível usar os mesmos nomes de variáveis em outros procedimentos na mesma pasta de trabalho ou módulo do Excel. Lembre-se de que, embora o nome seja o mesmo, cada variável é única e seu escopo é limitado ao procedimento relevante.
Porém, não recomento repetir os nomes das variáveis em todos os procedimentos. A explicação acima foi somente para fins ilustrativos. Isso porque, o uso dos mesmos nomes de variáveis em diferentes procedimentos torna a programação confusa.
Vamos ver como isso funciona na prática, voltando ao módulo que contém o procedimento Variavel_Teste Sub e adicionando um segundo procedimento quase idêntico:Variavel_Teste_Copia.
Sub Variavel_Teste()
Dim Variavel_teste1 As Integer Dim Variavel_teste2 As Integer
Variavel_teste1 = 10 Variavel_teste2 = 100
MsgBox "O valor da primeira variável é " & Variavel_teste1 & _ Chr(13) & "O valor da segunda variável é " & Variavel_teste2
End Sub
_________________________________________________________________
Sub Variavel_Teste_copia()
Dim Variavel_teste1 As Integer Dim Variavel_teste2 As Integer Variavel_teste1 = 20 Variavel_teste2 = 200 MsgBox "O valor da primeira variável copiada é " & Variavel_teste1 & _ Chr(13) & "O valor da segunda variável copiada é " & Variavel_teste2
End Sub
Observe que, a única diferença entre os 2 procedimentos Sub está nos valores atribuídos às variáveis e no texto que aparece na caixa de mensagem:
Ao executar a macro Variavel_Teste, o Excel exibirá a seguinte caixa de mensagem:
Ao executar a macro Variavel_Teste_Copia, o Excel exibirá uma caixa de mensagem muito semelhante. Observe em particular como os valores da primeira e segunda variaveis mudam:
Vamos agora entender um escopo mais amplo:
Escopo nº 2: variáveis VBA em nível de módulo (também conhecidas como Private)
As idéias por trás do conceito de variáveis VBA no nível do módulo (também conhecidas como Private) são, até certo ponto, semelhantes às que já vimos em relação às variáveis no nível do procedimento (com algumas variações).
Conforme o nome indica, essas variáveis estão disponíveis para uso em qualquer procedimento no módulo pela qual é declarada. Portanto, elas sobrevivem ao término de um procedimento específico. No entanto, elas não estão disponíveis para procedimentos em outros módulos dentro do mesmo projeto VBA.
Em consequência disto, o Excel armazena os valores atribuídos às variáveis no nível do módulo para uso ou acesso no módulo relevante. Portanto, elas mantêm seus valores entre os procedimentos, desde que esses procedimentos estejam dentro do mesmo módulo. Em outras palavras, elas permitem “passar o valor de uma variável de um procedimento para outro”.
Apesar do exposto acima, as variáveis no nível do módulo não retêm seus valores entre os procedimentos (mesmo que estejam dentro do mesmo módulo) se houver uma instrução End. Entretanto, as variáveis são eliminadas e perdem seus valores quando o VBA encontra essa declaração.
A maneira mais comum de declarar variáveis VBA em nível do módulo, é usando a instrução Dim. E como alternativa, a instrução Private.
É importante saber que, as variáveis no nível do módulo declaradas com a instrução Dim são por padrão privadas. Em outras palavras, no nível do módulo, Dim e Private são equivalentes. Portanto, neste caso podemos usar qualquer uma das duas.
Usar a instrução Private pode ser uma boa alternativa para declarar variáveis no nível do módulo. A razão para isso é que, como geralmente usamos a instrução Dim para declarar variáveis no nível do procedimento, usar uma palavra-chave diferente (Private) para declarar variáveis no nível do módulo torna o código mais legível, permitindo distinguir entre o nível do procedimento e variáveis no nível do módulo facilmente.
Assim como é o caso das variáveis no nível do procedimento, a chave para determinar o escopo de uma variável no nível do módulo é o local da instrução de declaração específica. Se declara uma variável VBA no nível do módulo da seguinte maneira:
- Dentro do módulo em que deseja usar a variável.
- Fora de qualquer procedimento armazenado no módulo.
A maneira de conseguir isso é simplesmente incluindo as declaração das variáveis relevantes na seção “Declaração” que aparece no início de um módulo. No caso de pastas de trabalho do Excel semelhante a esta que estou usando como exemplo neste tutorial, a seção Declarações fica onde a instrução Option Explicit aparece.
É possível, ao trabalhar em qualquer módulo VBA, acessar facilmente a seção “Declaração” clicando na lista suspensa no canto superior direito da Janela de Código, também conhecida como Caixa de Procedimentos, e selecionando a opção“Declaração”.
E então, a lista suspensa no canto superio direito da tela continuará exibindo a opção “Declaração” enquanto estivermos trabalhando nesta seção.
Veremos agora, como trabalhar com variáveis no nível do módulo, modificando o código VBA acima, da seguinte maneira:
- Tornando as variáveis (Variavel_teste1 e Variavel_teste2 ) em nível de módulo declarando-as na seção “Declaração”.
- Excluindo as instruções que atribuíram valores as variáveis (Variavel_teste1 e Variavel_teste2) na macro Variavel_Teste_Copia. De forma que, a atribuição feita dentro do procedimento Variavel_Teste Sub é mantida.
O código VBA resultante é o seguinte:
Option Explicit
Dim Variavel_teste1 As Integer Dim Variavel_teste2 As Integer
_______________________________________________________________
Sub Variavel_Teste()
Variavel_teste1 = 10 Variavel_teste2 = 100 MsgBox "O valor da primeira variável é " & Variavel_teste1 & _ Chr(13) & "O valor da segunda variável é " & Variavel_teste2
End Sub
_______________________________________________________________
Sub Variavel_Teste_copia()
MsgBox "O valor da primeira variável copiada é " & Variavel_teste1 & _ Chr(13) & "O valor da segunda variável copiada é " & Variavel_teste2
End Sub
A seguinte caixa de mensagem é exibida pelo Excel quando a macro Variavel_Teste é executada:
E a seguir, temos a caixa de mensagem exibida quando a macro Variavel_Teste_copia é executada. Note como as duas variáveis (Variavel_teste1 e Variavel_teste2) se comportam:
- As variáveis (Variavel_teste1 e Variavel_teste2) podem ser usadas em ambos os procedimentos.
- As variáveis (Variavel_teste1 e Variavel_teste2) reteram os valores que foram atribuídos pela macro Variavel_Teste para uso da macro Variavel_Teste_copia.
Agora, vamos dar uma olhada no terceiro tipo de escopo de variável:
Escopo nº 3: variáveis Public do VBA
A disponibilidade de variáveis Public do VBA é ainda mais ampla que a das variáveis no nível do módulo:
- No nível básico, as variáveis Public estão disponíveis para qualquer procedimento em qualquer módulo VBA armazenado na pasta de trabalho relevante do Excel.
- Em um nível mais complexo, pode-se disponibilizar variáveis Public para procedimentos e módulos armazenados em diferentes pastas de trabalho.
As variáveis declaradas com a instrução Public são visíveis para todos os procedimentos em todos os módulos “a menos que o Módulo Privado Opcional esteja habilitado”. Neste caso, as variáveis estarão disponíveis apenas para o projeto em que foram declaradas.
Ao decidir trabalhar com variáveis Public, lembre-se da regra geral que descrevi acima: torne suas variáveis do VBA o mais local possível.
Vamos começar dando uma olhada no caso básico:
Como declarar variáveis Public do VBA: Noções básicas
Para declarar uma variável Public, é preciso atender às seguintes condições:
- Deve ser declarada na seção “Declaração”, assim como se faz ao declarar uma variável em nível do módulo.
- Usar a instrução Public no lugar da instrução Dim.
- A declaração deve ser feita em um módulo VBA padrão.
As variáveis do VBA cujas declarações atendem a essas condições estão disponíveis para qualquer procedimento, mesmo em módulos diferentes, na mesma pasta de trabalho do Excel.
Para entender melhor como isso funciona, peguaremos como exemplo as macros que trabalhamos anteriormente. Como isso, note como as variáveis devem ser declaradas para serem públicas.
A princípio, as duas macros devem ser armazenads em módulos diferentes. Veja na imagem abaixo, como existem 2 módulos mostrados no Project Explorer.
O Módulo1 armazena a macro Variavel_Teste enquanto o Módulo2 armazena a macro Variavel_Teste_Copia. As variáveis são declaradas no Módulo1.
Observe na imagem acima, como as duas variáveis são declaradas usando a instrução Dim. Portanto, se eu tentar executar a macro Variavel_Teste_Copia (que agora não possui declaração ou atribuição de variável) armazenada no Módulo2, o Excel retornará a seguinte mensagem de erro:
Essa é exatamente a mesma mensagem de erro exibida no exemplo acima, ao examinar a instrução Option Explicit e os motivos pelos quais deve sempre declarar variáveis.
Voltando ao Módulo1, onde são declaradas as variáveis (Variavel_teste1 e Variavel_teste2), altere a palavra-chave usada para declará-las. Isto é, em vez de usar Dim vamos usar Public, e o restante da macro deve permanecer igual. Como apresentado a seguir:
Option Explicit Public Variavel_teste1 As Integer Public Variavel_teste2 As Integer
________________________________________________________
Sub Variavel_Teste()
Variavel_teste1 = 10 Variavel_teste2 = 100 MsgBox "O valor da primeira variável é " & Variavel_teste1 & _ Chr(13) & "O valor da segunda variável é " & Variavel_teste2
End Sub
Se executado novamente as duas macros (Variavel_Teste e Variavel_Teste_Copia) na mesma ordem que fiz acima, as caixas de mensagem exibidas pelo Excel agora mostrarão os mesmos valores. Mais precisamente:
- Ao executar a macro Variavel_Teste, o Excel exibe a seguinte caixa de mensagem:
E, como as variáveis agora são declaradas usando a instrução Public, o Excel exibe o seguinte na macro Variavel_Teste_Copia, que não declara as variáveis nem atribui valores a elas.
Como mostrado nas imagens acima:
- Ambas as variáveis estão disponíveis para todos os procedimentos na pasta de trabalho principal, mesmo que estejam armazenadas em módulos separados.
- As variáveis retêm os valores atribuídos pela primeira macro (Variavel_Teste) para uso da segunda macro (Variavel_Teste_Copia).
Esse método apresentado para se declarar variáveis Public do VBA é, na prática,o mais importante deles.
Como declarar variáveis Public VBA disponíveis em diferentes pastas de trabalho
Na prática, e na maioria das vezes ,é usada apenas variáveis Public disponíveis para todos os procedimentos em uma pasta de trabalho específica do Excel na qual a variável é declarada. Este é o método que descrevo na seção anterior.
No entanto, também é possível disponibilizar variáveis Public para procedimentos em módulos armazenados em diferentes pastas de trabalho do Excel. De fato, o compartilhamento de variáveis entre as pastas de trabalho é muito raro, mas é interessante saber que isso pode ser feito.
Torna-se uma variável disponível para os módulos armazenados nas pastas de trabalho do Excel, diferente daquela em que a variável é realmente declarada, seguindo as duas etapas abaixo:
1º passo: Declarar a variável como Public, seguindo as indicações na seção anterior.
2º passo: Criar uma referência à pasta de trabalho do Excel em que a variável principal é declarada.
É possível configurar uma referência usando o comando “Referências” no Editor do Visual Basic. Este comando aparece no menu “Ferramentas”:
Como regra geral, o escopo de uma variável determina sua vida útil. Portanto, vamos dar uma olhada no tópico seguinte:
Qual a vida útil de uma variável VBA e como isso é determinado
O termo “vida útil” refere-se a quanto tempo uma variável é armazenada na memória do computador.
O escopo de uma variável não apenas determina onde essa variável pode ser usada, mas também afeta as circunstâncias nas quais a variável é removida da memória. Em outras palavras, a vida útil de uma variável depende, geralmente, de seu escopo.
Felizmente, existem 2 regras básicas para isto:
Regra nº 1: As variáveis VBA no nível do procedimento declaradas com a instrução Dim são removidas da memória quando o procedimento principal é concluído.
Regra nº 2: Variáveis Static no nível do procedimento, variáveis no nível do módulo e variáveis Public mantêm seus valores entre as chamadas de procedimento.
Além disso, é possível limpar absolutamente todas as variáveis atualmente armazenadas na memória usando qualquer um dos dois métodos a seguir:
Método 1: Clique no botão “Redefinir”.
O botão “Redefinir” encontra-se na barra de ferramentas Padrão no Editor do Visual Basic ou no menu Executar, conforme mostrado nas imagens abaixo:
Método 2: Inclua uma declaração End no seu código VBA.
Usar a declaração End pode resultar em várias consequências, como finalizar a execução do código e fechar arquivos que foram abertos com a declaração Open. Em contrapartida, a consequência mais importante ao usar a declaração End é o fato de ela limpar as variáveis da memória.
É importante entender bem este tópico, mesmo que você não planeje usá-lo. A razão para isso, é que limpar uma variável pode fazer com que as variáveis Public percam seu contudo (mesmo sem você perceber). Por isso, sempre ao usar variáveis Public certifique se elas apresentam os valores esperados.
Como nomear variáveis do VBA
O VBA fornece muita flexibilidade em relação à maneira como se deseja nomear variáveis. De maneira geral, as regras que se aplicam à nomeação de variáveis são as mesmas que se aplicam à maioria dos outros elementos no VBA.
As principais regras que se aplicam à nomeação de variáveis, podem ser resumidas a seguir.
- O primeiro caractere do nome da variável deve ser uma letra.
- Os caracteres (exceto o primeiro) podem ser letras, números e alguns caracteres de pontuação.
Um dos caracteres de pontuação mais usados é o “underline” (_). Alguns programadores de VBA fazem uso dele para melhorar a legibilidade dos nomes de variáveis. Para fins ilustrativos, dê uma olhada nos nomes de macro que eu uso nesta postagem do blog.
- Os nomes de variáveis não podem incluir espaços (), pontos (.), operadores matemáticos (por exemplo +, -, /, ^ ou *), operadores de comparação (como =, <ou>) ou certos caracteres de pontuação (como @, #, $,% e & que eu explico abaixo).
- Os nomes das variáveis não podem ser os mesmos de nenhuma das palavras-chave reservadas do Excel. Alguns exemplo são: Sub, Dim, With, End, Next e For.
Se tentarmos usar qualquer uma dessas palavras, o Excel retornará uma mensagem de erro de sintaxe.
- O VBA não distingue entre letras maiúsculas e minúsculas. Por exemplo, “A” é o mesmo que “a”.
Independente desta regra, alguns programadores de VBA usam nomes de variáveis com letras maiúsculas e minúsculas para fins de legibilidade. Porém, pode ser uma boa ideia iniciar nomes de variáveis com letras minúsculas. Isso reduz o risco de confundir esses nomes com palavras-chave internas do VBA.
- O número máximo de caracteres que um nome de variável pode ter é 255. No entanto, nomes de variáveis muito longos não são recomendados.
- O nome de cada variável deve ser exclusivo dentro do seu escopo. Isso significa que o nome de uma variável no nível do procedimento deve ser exclusivo dentro do procedimento relevante, o nome de uma variável no nível do módulo deve ser exclusivo dentro do módulo e assim por diante.
Esse requisito faz sentido se considerarmos o quão importante é garantir que o VBA use a variável correta, em vez de confundi-la com outra.
Contudo, sugiro que torne os nomes das variáveis o mais descritivo possível, isto facilitará a sua vida! Além disso, adicionar um prefixo aos nomes das variáveis para identificar seu tipo de dados, é uma boa opção, pois a adição desses prefixos torna o código mais legível e mais fácil de modificar, já que cada variável, em qualquer parte do código, é identificada como um tipo específico de dado.
O ideal, é que cada usuário desenvolva seu próprio método de nomeação de variáveis que funcione de forma consistente.
As seções acima abrangem todos os itens principais na declaração de uma variável VBA. Vamos dar uma rápida olhada no que acontece depois que elas são declaradas:
Como atribuir valor ou expressão a uma variável VBA
Antes de atribuir um valor a uma variável VBA declarada, o Excel atribui o valor padrão. O valor atribuído por padrão depende do tipo de dado específico da variável. Por exemplo:
- O valor padrão atribuido para tipos de dados numéricos (como Byte, Inteiro, Moeda) é 0.
- No caso de variáveis do tipo String, o valor padrão é uma string vazia (“”).
- Para uma variável Variant, o valor padrão é Vazio. A forma como será representado vai depender do contexto:
- Em um contexto numérico, o valor Vazio é representado por 0.
- Em um outro contexto, é representado pela string de comprimento zero (“”).
Como regra geral, deve ser atribuido um valor ou expressão às suas variáveis em vez de confiar nos valores padrões do VBA.
A instrução usada para atribuir um valor a uma variável VBA é chamada, de instrução de atribuição. A atribuição de um valor ou expressão inicial a uma variável VBA também é conhecida como inicializar a variável. Elas pegam um valor ou expressão, produzindo uma seqüência de caracteres, número ou objeto, e os atribuem a uma variável ou a uma constante.
Nota-se que, não é possível declarar uma variável e atribuir um valor ou expressão a ela na mesma linha. Portanto, no VBA as instruções de atribuição são separadas das instruções de declaração variável.
As expressões podem ser vistas por 3 características principais:
- Elas são compostas por uma combinação de uma ou mais, dos 4 elementos a seguir:
- Palavras-chave.
- Operadores.
- Variáveis.
- Constantes.
O resultado é um dos 3 itens a seguir:
- Uma string.
- Um número.
- Um objeto.
Eles podem ser usados para qualquer um dos seguintes 3 propósitos:
- Realizar cálculos.
- Manipular caracteres.
- Dados de teste.
Expressões não são particularmente complicadas de lidar. Se você souber criar fórmulas no Excel, não terá problemas para criar expressões no VBA.
A principal diferença entre fórmulas e expressões no VBA , é exatamente o que se faz com elas:
- Ao usar fórmulas no Excel, é exibido o resultado em uma célula.
- Ao usar expressões, pode-se usar o VBA para atribuir o resultado a uma variável.
Usa-se o sinal de igual (=) para atribuir um valor ou expressão a uma variável VBA. Neste contexto, o sinal de igual não representa uma igualdade. Em outras palavras, trata-se apenas de um sinal operador e não um símbolo matemático que denota uma igualdade.
A sintaxe básica de uma instrução de atribuição usando o sinal de igual é a seguinte:
- O lado direito do sinal de igual: representa o valor ou expressão que deseja armazenar.
- O lado esquerdo do sinal de igual: corresponde a variável onde se armazena os dados.
Para concluir esta seção, dê uma olhada rápida nas atribuições que foram feitas nas macros Variavel_Teste e Variavel_Teste_Copia. A imagem a seguir mostra como essas atribuições foram feitas:
Observe o uso do sinal de igual (=) nos dois casos. O valor que aparece ao lado direito do sinal de igual é atribuído à variável que aparece no lado esquerdo do sinal.
Apresentei até aqui praticamente todo conceito básico relacionado à declaração de variáveis no VBA. Espero que tenham gostado!
Conclusão
Neste artigo, vimos os principais tópicos relacionados à declaração de variável VBA. O pontapé inicial para programar uma macro no Excel.
Eu sei que não é comum ler um artigo deste, como tutorial, e repetir para aprender, mas recomendo fortemente que você tome coragem de repetir todo o passo-a-passo. Desenvolva seu próprio método para nomear variáveis, veja o que funciona para você, formalize-o e use de forma consistente.
Eu penso que praticar é a melhor maneira de aprender e, embora pareça simples, é preciso se acostumar a navegar entre as telas para que no futuro você possa se tornar um usuário avançado.
O site deste pessoal aqui foi referência para este artigo. O site é muitoooo bacana com várias dicas legais de programação, mas infelizmente o conteúdo está em inglês, o que não deixa de ser uma boa referência para quem conseguir acompanhar. Eu recomendo.
Portanto, continue lendo mais sobre VBA aqui.
Sensasional!
Gratidão demais!
Parabéns pelo trabalho!
Muito obrigado.
Sensacional, obrigada.
Parabéns !!
Muito obrigado,
Dica: Poderia criar curso para venda mais que fosse desta mesma forma de ensinar que esta no site ou apostilas..
Adriano
Ótimo trabalho. Parabéns !!!