Iniciar sessão com a Microsoft
Iniciar sessão ou criar uma conta.
Olá,
Selecione uma conta diferente.
Tem várias contas
Selecione a conta com a qual pretende iniciar sessão.

Introdução

Este artigo descreve como utilizar variáveis em Microsoft Excel sub-procedimentos na Microsoft Visual Basic for Applications.

Mais Informações

Variáveis num sub procedimento

Uma funcionalidade avançada das linguagens de programação é a capacidade de armazenar algo numa variável para que os conteúdos da variável possam ser utilizados ou alterados mais tarde no procedimento. Este documento aborda a seguinte utilização das variáveis em Visual Basic:

  • Como as variáveis são declaradas.

  • Os procedimentos e os projetos que podem utilizar a variável.

  • A duração de uma variável.

Declarar uma variável numa macro

A forma mais simples de declarar uma variável numa macro é utilizar a inserção Dim. A linha seguinte declara duas variáveis, como número inteiro:

    Dim x As Integer, y As Integer

Com x e y especificados como números inteiros, está a pedir ao Visual Basic para colocar memória suficiente para uma variável de número inteiro (2 bytes cada para x e y) e que as informações que estão armazenadas em x ou y são um número inteiro entre -32768 e 32767.

NOTA: Se declarar mais do que uma variável através de uma única inserção Dim, tem de especificar o tipo de dados para cada variável.

Se não especificar o tipo de dados para cada variável, como no seguinte código de Visual Basic, apenas a variável y será configurada como uma variável de número inteiro. A variável x será um tipo de variante:

    Dim x, y As Integer

Para obter informações adicionais, consulte o tipo de dados Variante abaixo.
 

Para efetuar um teste de variável, siga estes passos:

  1. Guarde e feche livros abertos e, em seguida, abra um novo livro.

  2. Inicie o Visual Basic Editor de Alt+F11.

  3. No menu Inserir, clique em Módulo.

  4. Escreva o seguinte código:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "o valor de x é " & x & _
        Chr(13) & "o valor de y é " & y
    End Sub

  5. Execute a macro Variable_Test macro. Recebe a seguinte mensagem:the value of x is 10


    the value of y is 100

  6. Clique em OK.

  7. Na macro Variable_Test macro altere a seguinte linha:

    x = 10

  8. to:

    x = "error"

  9. Execute a macro Variable_Test macro.

Receberá um erro em tempo de resposta porque "erro" não é um valor inteiro e está a tentar atribuir este valor de cadeia à variável de valor inteiro x.
 

Resumo do tipo de dados

Estes são os tipos de dados variáveis comuns:

tipos de dados de variáveis comuns

tipo de dados Variant

Se não especificar um tipo de dados quando declarar uma variável ou não declarar de todo uma variável, Visual Basic especifica automaticamente o tipo de dados da variante para esta variável. Seguem-se as vantagens das variáveis declaradas como este tipo de dados:

  • As variáveis podem conter valores de cadeia, data, hora, booleano ou numérico.

  • As variáveis podem converter os valores que contêm automaticamente.

A desvantagem é que as variáveis de variantes requerem pelo menos 16 bytes de memória. 16 bytes de memória podem ser significativos em procedimentos grandes ou em módulos complexos.

Para ver como funciona na macro Variable_Test, siga estes passos:

Altere o código na macro Variable_Test para:

Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

Execute a macro Variable_Test macro.

Não receberá uma mensagem de erro porque pode atribuir nada às variáveis de variantes x e y.

NOTA: Também pode deixar de fora a linha seguinte e a macro ainda funcionará como as variáveis x e y são tratadas como tipos de dados Variante:

    Dim x, y

Âmbito de uma variável

Quando declara uma variável, esta pode ou não ser vista por outras macros no mesmo módulo, noutros módulos ou noutros projetos. Esta disponibilidade de uma variável nos módulos é referida como âmbito. Os três tipos de âmbito são ao nível dos procedimentos, ao nível do módulo privado e ao nível do módulo público. O âmbito depende de como e onde declara as variáveis ou variáveis.

Âmbito ao nível do procedimento

Uma variável com âmbito ao nível do procedimento não é vista fora do procedimento em que é declarada. Se definir o valor de uma variável que tem o âmbito ao nível do procedimento, os conteúdos da variável não serão vistos por outras macros.

Para verificar se uma variável com o âmbito ao nível do procedimento não é vista fora do procedimento em que é declarado, siga estes passos:

  1. Insira um novo módulo no seu projeto.

  2. Escreva ambas as macros seguintes neste módulo:
      Sub Macro1() Dim x As Número Inteiro x = 10 MsgBox "x, conforme visto por Macro1 é " & x 'a linha seguinte executa Macro2 End Sub Macro2() MsgBox "x, conforme visto por Macro2 é " & x End Sub

  3. Execute Macro1 e obterá a seguinte mensagem:

    x, as seen by Macro1 is 10

  4. Clique em OKe receberá a seguinte mensagem:

    x, as seen by Macro2 is

  5. Clique em OK.

Macro2 não apresenta um valor para a variável x porque a variável x é local para Macro1.

Âmbito de módulo público e privado

Pode definir variáveis na secção de declarações de um módulo (na parte superior de um módulo, acima de todos os sub procedimentos) e definir o âmbito da sua variável ao utilizar a Inserção Pública, a inserção Dim ou a inserção Privada. Se colocar a inserção Pública à frente da variável, a sua variável estará disponível para todas as macros em todos os módulos no projeto. Se colocar a inserção Dim ou a inserção Privado à frente da variável, a sua variável só estará disponível para macros no módulo onde está a ser declarada.

Para ver a diferença entre a Declaração Pública e a declaração Dim, siga estes passos:

  1. Guarde e feche livros abertos e, em seguida, abra um novo livro.

  2. Inicie o Visual Basic Editor de Ações a Fazer.

  3. Insira um módulo no seu projeto.

  4. Type the following code into this module:
    
    Public x As Integer
    Sub Macro_1a()
        x = 10
        MsgBox x
        Macro_1b
    End Sub
    Sub Macro_1b()
        x = x * 2
        MsgBox x
        Macro2
    End Sub
  5. Insira outro módulo no seu projeto.

  6. Escreva o seguinte código neste módulo:


    Sub Macro2()     x = x * 3
        MsgBox x
    End Sub

  7. Execute Macro_1a macro no primeiro módulo.

  8. Com a variável x declarada como "Público x Como Número Inteiro", as três macros no projeto têm acesso ao valor de x. A primeira caixa de mensagem apresenta um valor de 10. A segunda caixa de mensagem apresenta um valor de 20 (porque x é multiplicado por 2 em Macro_1b). A terceira caixa de mensagem apresenta um valor de 60 (porque o valor de x foi alterado para 20 no Macro_1b e depois foi multiplicado por 3 na Macro2).

  9. Altere a linha da declaração no primeiro módulo de:

       Public x As Integer

    to:

       Dim x As Integer

  10. Execute a macro Macro_1a macro.

  11. Com a variável x declarada como "Dim x Como Inteiro", apenas as macros no primeiro módulo têm acesso ao valor de x. A primeira caixa de mensagem apresenta um valor de 10, a segunda caixa de mensagem apresenta um valor de 20, (porque x é multiplicado por 2 em Macro_1b) e a terceira caixa de mensagem apresenta um valor de 0 (porque Macro2 não vê o valor de x e o valor nãonitializado de zero é utilizado pela Macro 2).

  12. Altere a linha da declaração no primeiro módulo de:

      Dim x As Integer

    para:

        Private x As Integer

  13. Execute a macro Macro_1a macro.

  14. As mesmas caixas de mensagens são apresentadas ao utilizar o âmbito da declaração privada, uma vez que estavam a utilizar a inserção Dim. A variável x tem o mesmo âmbito, privado para o módulo onde é declarado.


NOTA: Se quiser que o âmbito da sua variável seja limitado ao módulo onde é declarado, utilize a Inserção Privada em vez da inserção Dim. Ambas têm o mesmo efeito, mas o âmbito é mais claro quando lê o código se utilizar a inserção Privado.
 

Duração de uma variável

O tempo durante o qual uma variável mantém o seu valor é conhecido como a sua duração. O valor de uma variável pode mudar ao longo da sua duração, mas manterá um valor. Além disso, quando uma variável perde o âmbito, já não tem um valor.
 

Inicializar o valor de uma variável

Quando executa uma macro, todas as variáveis são inicializadas para um valor. Uma variável numérica é inicializada para zero, uma cadeia de comprimento variável é inicializada para uma cadeia de comprimento zero ("") e uma cadeia de comprimento fixo é preenchida com o código ASCII 0. As variáveis das variantes são inicializadas para Vazio. Uma variável vazia é representada por um zero num contexto numérico e uma cadeia de comprimento zero ("") num contexto de cadeia.

Variáveis ao nível do procedimento

Se tiver uma variável declarada numa macro através da inserção Dim, a variável retém o seu valor enquanto a macro estiver a ser executada. Se esta macro chamar outras macros, o valor da variável é retido (no entanto, não está disponível para as outras macros), desde que estas outras macros também sejam executadas.

Para demonstrar como as variáveis ao nível do procedimento funcionam, siga estes passos:

  1. Insira um novo módulo no seu projeto.

  2. Escreva ambas as macros seguintes neste módulo:

    Sub Macro1()
        'definir x como uma variável de nível de procedimento
       Dim x As Integer
       MsgBox "o valor inicializado de x é " & x
       x = 10
        MsgBox "x é " & x
        'a linha seguinte executa Macro2
        Macro2
        MsgBox "x ainda está " & x
    End Sub
    Sub Macro2()
        CaixaMsg "x, como visto por Macro2 é " & x
    End Sub

  3. Executar Macro1.

  4. Recebe a seguinte mensagem:

        the initialized value of x is 0

  5. Clique em OKe receberá a mensagem:

     x is 10

  6. Clique em OKe receberá a seguinte mensagem:

    x, as seen by Macro2 is

  7. Clique em OK.

  8. Macro2 não apresenta um valor para a variável x porque a variável x é local para Macro1. É-lhe enviada a seguinte

    mensagem:x is still 10

  9. Clique em OK.

  10. Executar Macro1.

Recebe as mesmas mensagens descritas nos passos 3 a 6 porque assim que a Macro1 deixou de ser executada no Passo 6, o valor da variável x foi perdido. Assim, quando voltar a correr Macro1 no Passo 7, a primeira mensagem mostra o valor de x como zero (o valor inicializado).

Palavra-chave estática

Se uma variável ao nível do procedimento for declarada utilizando a palavra-chave Estática, a variável mantém o seu valor até que o projeto seja reposto. Assim, se tiver uma variável estática, da próxima vez que chamar o procedimento, a variável estática será inicializada para o último valor.

Para ver como funciona a palavra-chave Estática, siga estes passos:

  1. Change the code in Macro1 to:
    
    Sub Macro1()
        'set x as a procedure level variable
        Static x As Integer
           MsgBox "the initialized value of x is " & x
        x = x + 10
        MsgBox "x is " & x
    End Sub
  2. Executar Macro1.

  3. Receberá a mensagem:

    the initialized value of x is 0

  4. Clique em OKe receberá a mensagem:

    x is 10

  5. Clique em OK.

  6. Execute Macro1 e irá obter a seguinte mensagem:

    the initialized value of x is 10

  7. Clique em OKe receberá a seguinte mensagem:

    x is 20

  8. Clique em OK.

Os valores que aparecem nas mensagens são diferentes da segunda vez, porque a variável x é declarada como uma variável estática e a variável mantém o rescetivo valor depois de executar a Macro1 pela primeira vez.

NOTA:  Se tiver uma variável ao nível do módulo, a sua duração é a mesma que se tratava de uma variável ao nível do procedimento estático.

Para verificar a duração de uma variável ao nível do módulo, siga estes passos:

  1. Change the code in the module that contains Macro1 to the following:
    
    Dim x As Integer  'create a module-level variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
       x = x + 10
       MsgBox "x is " & x
    End Sub
  2. Execute Macro1 e obterá a seguinte mensagem:

    the initialized value of x is 0

  3. Clique em OK e receberá a seguinte mensagem:

    x is 10

  4. Clique em OK,

  5. Executar Macro1 e receberá esta
    mensagem:the initialized value of x is 10

  6. Clique em OK.

  7. Recebe a seguinte
    mensagem:
    x is 20

  8. Clique em OK.

Os valores que aparecem nas mensagens são diferentes da segunda vez, porque a variável x é declarada como uma variável estática e mantém o seu valor depois de executar Macro1 pela primeira vez.
 

Repor um projeto para repor variáveis

Se quiser repor o valor de uma variável estática ou de uma variável ao nível do módulo, clique no botão Repor no botão
Barra de ferramentas padrão ou clique em Repor no menu Executar.

Se o fizer para o projeto Macro1 e, em seguida, voltar a correr Macro1,o valor da variável x é inicializado novamente para zero e recebe a primeira mensagem:

    the initialized value of x is 0

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.

Estas informações foram úteis?

Quão satisfeito está com a qualidade do idioma?
O que afetou a sua experiência?
Ao selecionar submeter, o seu feedback será utilizado para melhorar os produtos e serviços da Microsoft. O seu administrador de TI poderá recolher estes dados. Declaração de Privacidade.

Obrigado pelo seu feedback!

×