NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Quer Receber Novidades e E-books Gratuitos de Excel? * Junte-se a mais de 103.000 pessoas!

Curso Grátis de Excel Avançado - Módulo 5 - Lição: Escopo de Variáveis e Variáveis do tipo Array

120 Lições | Gratuito Online | Autor: Júlio Battisti


O Escopo das variáveis, no VBA.

O escopo de uma variável, define em que partes do código a variável pode ser utilizada. Em VBA, podemos ter os seguintes escopos para as variáveis:

Escopo de Módulo:

Uma variável declarada dentro do Módulo (um módulo pode conter um ou mais procedimentos ou funções, cada procedimento função começa com um Sub ou Function e termina com um End Sub ou End Function, respectivamente. Veremos mais sobre funções e procedimentos, nas próximas lições), mas fora de qualquer procedimento. Com isso a variável pode ser utilizada dentro de todo o bloco de código do Módulo, inclusive dentro dos Procedimentos, caso exista algum.

Um módulo de uma planilha pode conter uma ou mais macros, sendo que cada macro é um procedimento, isto é, inicia com um Sub e termina com um End Sub. Tudo o que estiver entre Sub e End Sub, faz parte da respectiva macro. Uma variável declarada ao nível de Módulo, existe enquanto o Módulo estiver sendo executado.São as variáveis declaradas na seção de Declarações do Módulo. Uma variável declarada ao nível de Módulo, poderá ser utilizada em todos os procedimentos/funções do módulo, isto é, em todas as macros que fazem parte do respectivo módulo.

Escopo de procedimento/função/macro:

A variável somente pode ser utilizada, dentro do procedimento onde esta é declarada. Aqui o conceito de procedimento praticamente se confunde com o de macro, ou seja, cada macro é criada como um procedimento separado, dentro do módulo de código da planilha. Se tentarmos utilizar a variável fora do procedimento onde a ela foi declarada, não teremos acesso ao valor da variável. Uma variável declarada ao nível de procedimento, existe enquanto o procedimento estiver sendo executado.

NOTA: Um procedimento é um bloco de código que pode ser chamado em qualquer ponto do Módulo. Ao chamarmos um procedimento, a execução é deslocada para dentro do procedimento. Após concluído o procedimento, a execução segue com a linha seguinte à que chamou o procedimento. Veremos maiores detalhes sobre procedimentos e funções nas próximas lições.

Vamos considerar alguns trechos de código para entendermos melhor este conceito de escopo de uma variável.

Considere o seguinte trecho de código, dentro de um módulo VBA de uma planilha do Excel:

'Seção geral do módulo.
' Variáveis declaradas nessa seção tem o escopo de módulo,
' isto é, podem ser utilizadas em qualquer procedimento dentro do módulo.
Dim x, y,aux1 As Integer
Call proc1
' Agora vamos tentar utilizar os valores de a e b
' Fora do procedimento proc1.
' Observe que a variável aux1 não é calculada
' corretamente, uma vez que os valores de a e b
' não estão disponíveis, fora do procedimento proc1
Aux1 = a + b
MsgBox "aux1= " & Aux1
'Agora vamos criar um procedimento
'E declarar duas variáveis dentro deste procedimento.
'Estas variáveis somente serão visíveis,
'Dentro deste procedimento.
Sub proc1()
   Dim a, b
   x=10
   y=20
   a=5
   b=7
   MsgBox "x= " & x & " y= " & y & " a= " & a & " b= " & b
End Sub

O comando Call faz o chamado ao procedimento proc1. Este procedimento deve ser definido no mesmo módulo, caso contrário um erro será gerado. Ao encontrar esse comando o Excel desloca a execução para o procedimento proc1, executa os comandos deste procedimento e após encerrar continua a execução a partir do comando seguinte ao comando Call.

Ao executar esse código será exibida a janela indicada na Figura a seguir:

Excel Avançado em 120 Lições - Júlio Battisti

O comando Call Proc1 é executado. O excel executa os comandos dentro de Proc1. As variáveis x e y foram declarados com escopo de módulo, por isso podem ser utilizadas corretamente dentro do procedimento Proc1, embora não tenham sido declaradas dentro desse procedimento. As variáveis x e y tem escopo de módulo, ou seja, podem ser utilizadas em qualquer procedimento, dentro do módulo. Os valores definidos para x e y, dentro do procedimento Proc1, permanecerão disponíveis, mesmo se usarmos x e y em outros procedimentos desse módulo.

Como a e b estão declaradas dentro de Proc1, o seu escopo está ativo, isso é, o Excel tem acesso aos valores de a e b. Porém observe que x e y apresentam valores nulos. Isso ocorre porque a e b foram declarados. Por isso os valores de a e b também são exibidos corretamente. Agora vamos fazer uma tentativa de usar as variáveis a e b fora do procedimento Proc1. Como elas foram declaradas dentro de Proc1, somente são "visíveis", isto é, mantém o seu valor quando Proc1 estiver sendo executada. Fora de Proc1, as variáveis a e b terão valores nulos, conforme comprovaremos logo a seguir:

Dê um clique no botão OK. Será exibida a janela indicada na figura a seguir:

Excel Avançado em 120 Lições - Júlio Battisti

Como é possível se aux1= a + b e a=5 e b=7, logo aux1 deveria ser igual a 12. O que está acontecendo? Observe que o valor da variável aux1 (foi calculado incorretamente), pois a variável aux1 depende dos valores de "a" e "b". Como as variáveis a e b foram declaradas dentro do procedimento Proc1, elas não podem ser acessadas de fora do procedimento proc1, ou seja, após a execução do procedimento ter sido encerrada.

Dê um clique no botão OK e mantenha a planilha aberta.

Com esse exemplo, foi possível verificar, na prática, o conceito de escopo (algumas vezes chamado de visibilidade) das variáveis. Na próxima lição, trataremos das Estruturas e laços de controle, que são elementos muito importantes na criação de programas VBA.

[LIVRO]: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2010 - PASSO-A-PASSO

APRENDA COM JULIO BATTISTI - 1124 PÁGINAS: CLIQUE AQUI