Entrar com a conta da Microsoft
Entrar ou criar uma conta.
Olá,
Selecionar uma conta diferente.
Você tem várias contas
Escolha a conta com a qual você deseja entrar.

Introdução

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

Mais informações

Variáveis em um sub-procedimento

Um recurso poderoso de linguagens de programação é a capacidade de armazenar algo em uma variável para que o conteúdo da variável possa ser usado ou possa ser alterado posteriormente no procedimento. Este documento discute o seguinte uso de variáveis em Visual Basic:

  • Como as variáveis são declaradas.

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

  • O tempo de vida de uma variável.

Declarar uma variável em uma macro

A maneira mais simples de declarar uma variável em uma macro é usar a instrução Dim. A linha a seguir declara duas variáveis, como inteiros:

    Dim x As Integer, y As Integer

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

OBSERVAÇÃO: Se você declarar mais de uma variável usando uma única instrução Dim, deverá especificar o tipo de dados para cada variável.

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

    Dim x, y As Integer

Para obter informações adicionais, consulte Variant data type below.
 

Para executar um teste de variável, siga estas etapas:

  1. Salve e feche todas as guias de trabalho abertas e abra uma nova workbook.

  2. Inicie o editor Visual Basic (pressione ALT+F11).

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

  4. Digite 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 Variable_Test macro. Você 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 a seguinte linha:

    x = 10

  8. para:

    x = "error"

  9. Execute a Variable_Test macro.

Você receberá um erro em tempo de executar porque "erro" não é um inteiro e está tentando atribuir esse valor de cadeia de caracteres à variável inteiro x.
 

Resumo do tipo de dados

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

tipos de dados variáveis comuns

tipo de dados Variant

Se você não especificar um tipo de dados ao declarar uma variável ou não declarar uma variável, Visual Basic especificará automaticamente o tipo de dados variante para essa variável. Veja a seguir as vantagens das variáveis declaradas como esse tipo de dados:

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

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

A desvantagem é que as variáveis variantes exigem 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 isso funciona na macro Variable_Test, siga estas etapas:

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 Variable_Test macro.

Você não receberá um erro porque pode atribuir qualquer coisa às variáveis variantes x e y.

OBSERVAÇÃO: Você também pode deixar de fora a seguinte linha e a macro ainda funcionará como as variáveis x e y são tratadas como tipos de dados Variant:

    Dim x, y

Escopo de uma variável

Quando você declara uma variável, ela pode ou não ser vista por outras macros no mesmo módulo, em outros módulos ou em outros projetos. Essa disponibilidade de uma variável em módulos é chamada de escopo. Os três tipos de escopo são nível de procedimento, nível de módulo privado e nível de módulo público. O escopo depende de como e onde você declara suas variáveis ou variáveis.

Escopo de nível de procedimento

Uma variável com escopo de nível de procedimento não é vista fora do procedimento em que é declarada. Se você definir o valor de uma variável que tenha escopo de nível de procedimento, o conteúdo dessa variável não será visto por outras macros.

Para verificar se uma variável com escopo de nível de procedimento não é vista fora do procedimento em que é declarada, siga estas etapas:

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

  2. Digite as duas macros a seguir neste módulo:
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, como visto por Macro1 é " & x 'a próxima linha executa Macro2 Macro2 End Sub Macro2() MsgBox "x, como visto por Macro2 é " & x End Sub

  3. Execute Macro1 e você obterá a seguinte mensagem:

    x, as seen by Macro1 is 10

  4. Clique em OKe você obterá a seguinte mensagem:

    x, as seen by Macro2 is

  5. Clique em OK.

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

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

Você pode definir variáveis na seção declarações de um módulo (na parte superior de um módulo, acima de todos os procedimentos sub) e definir o escopo de sua variável usando a instrução Public, a instrução Dim ou a instrução Private. Se você colocar a instrução Public na frente da variável, sua variável estará disponível para todas as macros em todos os módulos do projeto. Se você colocar a instrução Dim ou a instrução Private na frente da variável, sua variável estará disponível apenas para macros no módulo em que ela está sendo declarada.

Para ver a diferença entre a instrução Public e a instrução Dim, siga estas etapas:

  1. Salve e feche todas as guias de trabalho abertas e abra uma nova agenda.

  2. Inicie a Visual Basic Editor.

  3. Insira um módulo em 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 em seu projeto.

  6. Digite 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 "Public x As Integer", todas as três macros do projeto têm acesso ao valor de x. A primeira caixa de mensagem exibe um valor de 10. A segunda caixa de mensagem exibe um valor de 20 (porque x é multiplicado por 2 em Macro_1b). A terceira caixa de mensagem exibe um valor de 60 (porque o valor de x foi alterado para 20 em Macro_1b e, em seguida, foi multiplicado por 3 em Macro2).

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

       Public x As Integer

    para:

       Dim x As Integer

  10. Execute a Macro_1a macro.

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

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

      Dim x As Integer

    Para:

        Private x As Integer

  13. Execute a Macro_1a macro.

  14. As mesmas caixas de mensagem são exibidas usando o escopo de instrução Private como estavam usando a instrução Dim. A variável x tem o mesmo escopo, privado para o módulo em que ele é declarado.


OBSERVAÇÃO: Se você quiser que o escopo de sua variável seja limitado ao módulo em que ele é declarado, use o Privatestatement em vez da instrução Dim. Ambos têm o mesmo efeito, mas o escopo fica mais claro quando você lê o código se você usa a instrução Private.
 

Vida útil de uma variável

O tempo durante o qual uma variável retém seu valor é conhecido como seu tempo de vida. O valor de uma variável pode mudar ao longo de sua vida útil, mas manterá um valor. Além disso, quando uma variável perde escopo, ela não tem mais um valor.
 

Inicializar o valor de uma variável

Quando você executar uma macro, todas as variáveis são inicializadas para um valor. Uma variável numérica é inicializada como zero, uma cadeia de caracteres de comprimento variável é inicializada para uma cadeia de caracteres de comprimento zero (""), e uma cadeia de caracteres de comprimento fixo é preenchida com o código ASCII 0. As variáveis variant são inicializadas como Empty. Uma variável Empty é representada por um zero em um contexto numérico e uma cadeia de caracteres de comprimento zero ("") em um contexto de cadeia de caracteres.

Variáveis de nível de procedimento

Se você tiver uma variável declarada em uma macro usando a instrução Dim, a variável manterá seu valor enquanto a macro estiver em execução. Se essa macro chamar outras macros, o valor da variável será mantido (não disponível para as outras macros), contanto que essas outras macros também sejam em execução.

Para demonstrar como funcionam as variáveis no nível do procedimento, siga estas etapas:

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

  2. Digite as duas macros a seguir 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 próxima linha executa Macro2
        Macro2
        MsgBox "x ainda é " & x
    End Sub
    Sub Macro2()
        MsgBox "x, como visto por Macro2 é " & x
    End Sub

  3. Execute Macro1.

  4. Você recebe a seguinte mensagem:

        the initialized value of x is 0

  5. Clique em OKe você obterá a mensagem:

     x is 10

  6. Clique em OKe você obterá a seguinte mensagem:

    x, as seen by Macro2 is

  7. Clique em OK.

  8. Macro2 não exibe um valor para a variável x porque a variável x é local para Macro1. Você recebeu a seguinte mensagem:

    x is still 10

  9. Clique em OK.

  10. Executar Macro1.

Você recebe as mesmas mensagens descritas nas etapas 3 a 6 porque assim que Macro1 parou de ser executado na Etapa 6, o valor da variável x foi perdido. Portanto, quando você reprisa Macro1 na Etapa 7, a primeira mensagem mostra o valor de x como zero (o valor inicializado).

Palavra-chave estática

Se uma variável de nível de procedimento for declarada usando a palavra-chave Static, a variável manterá seu valor até que seu projeto seja redefinido. Portanto, se você tiver uma variável estática, na próxima vez que você chamar seu procedimento, a variável estática será inicializada até seu último valor.

Para ver como a palavra-chave Static funciona, siga estas etapas:

  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. Execute Macro1.

  3. Você receberá a mensagem:

    the initialized value of x is 0

  4. Clique em OKe você obterá a mensagem:

    x is 10

  5. Clique em OK.

  6. Execute Macro1 e você obterá a seguinte mensagem:

    the initialized value of x is 10

  7. Clique em OKe você obterá a seguinte mensagem:

    x is 20

  8. Clique em OK.

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

OBSERVAÇÃO:  Se você tiver uma variável de nível de módulo, sua vida útil será a mesma que se fosse uma variável estática no nível do procedimento.

Para verificar o tempo de vida de uma variável no nível do módulo, siga estas etapas:

  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 você obterá a seguinte mensagem:

    the initialized value of x is 0

  3. Clique em OK e você obterá a seguinte mensagem:

    x is 10

  4. Clique em OK,

  5. Execute Macro1 e você obterá esta mensagem:

    the initialized value of x is 10

  6. Clique em OK.

  7. Você recebe a seguinte mensagem:

    x is 20

  8. Clique em OK.

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

Redefinir um projeto para redefinir variáveis

Se você quiser redefinir o valor para uma variável estática ou para uma variável no nível do módulo, clique no botão Redefinir no
Barra de ferramentas padrão ou clique em Redefinir no menu Executar.

Se você fizer isso para o projeto Macro1 e, em seguida, reprisar Macro1, o valor da variável x será inicializado de volta para zero e você receberá a primeira mensagem:

    the initialized value of x is 0

Precisa de mais ajuda?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.

As comunidades ajudam você a fazer e responder perguntas, fazer comentários e ouvir especialistas com conhecimento avançado.

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?
Ao pressionar enviar, seus comentários serão usados para aprimorar os produtos e serviços da Microsoft. Seu administrador de TI poderá coletar esses dados. Política de Privacidade.

Agradecemos seus comentários!

×