Como usar variáveis em procedimentos Sub no Visual Basic for Applications do Excel

Traduções deste artigo Traduções deste artigo
ID do artigo: 843144 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

INTRODUÇÃO

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

Mais Informações

Variáveis em um procedimento sub

Um recurso poderoso de linguagens de programação é a capacidade de armazenar algo em uma variável, de modo que o conteúdo da variável pode ser usado ou pode ser alterado posteriormente no procedimento. Este documento discute o seguinte uso de variáveis no Visual Basic:
  • Como as variáveis são declaradas.
  • Os procedimentos e os projetos que podem usar thevariable.
  • O tempo de vida de uma variável.

Declarar uma variável em uma macro

A maneira mais simples para declarar uma variável em uma macro é usar a instrução Dim . A linha a seguir declara duas variáveis, x e y, como inteiros:
Dim x As Integer, y As Integer
Com x e y especificadas como inteiros, informando o Visual Basic para reserve memória suficiente para uma variável integer (dois bytes cada, para x e y) e as informações armazenadas no 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 declaração Dim , você deve especificar o tipo de dados para cada variável.

Se você não especificar o tipo de dados para cada variável, como no seguinte código de Visual Basic, somente a variável y é configurada como uma variável integer. A variável x será um tipo variant:
Dim x, y As Integer
Para obter informações adicionais, consulte a seção "Tipo de dados Variant".

Para executar um teste de variável, siga estas etapas:
  1. Salvar e fechar as pastas de trabalho abertas e, em seguida, abrir um newworkbook.
  2. Inicie o Editor do Visual Basic (pressione ALT + F11).
  3. No menu Inserir , clique emmódulo.
  4. Digite o seguinte código:
    Sub Variable_Test()
    Dim x As Integer, y As Integer
    x = 10
    y = 100
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
    End Sub
  5. Execute a macro Variable_Test . Você recebe a seguinte mensagem:
    o valor de x é 10
    o valor de y é 100
  6. Clique em OK.
  7. A macro Variable_Test altere a seguinte linha:
    x = 10
    

    para:
    x = "error"
    
  8. Execute a macro Variable_Test .
Você receberá um erro de tempo de execução, como "erro" não é um número inteiro e está tentando atribuir esse valor de seqüência de caracteres à variável de inteiro x.

Resumo de tipo de dados

A tabela a seguir lista os tipos de dados da variável comuns:

Recolher esta tabelaExpandir esta tabela
Tipo de dadosTamanho de armazenamentoIntervalo permitido
Valor booleano 2 bytes VERDADEIRO ou falso
Número inteiro 2 bytes -32.768 a 32.767
Longo 4 bytes -2.147.483.648 a 2.147.483.647
Duplo 8 bytes -1, 79769313486232E308 a-4, 94065645841247E-324 para valores negativos; 94065645841247E-324 a 1, 79769313486232E308 para valores positivos
Moeda 8 bytes -922,337,203,685,477.5808 a 922.337.203.685.477,5807
Data 8 bytes 1 de janeiro de 100 a 31 de dezembro de 9999
Cadeia de caracteres 10 bytes e o comprimento da seqüência de caracteres

Tipo de dados Variant

Se você não especificar um tipo de dados quando você declarar uma variável, ou você não declarar uma variável em todos os, Visual Basic automaticamente especifica o tipo de dados variant para essa variável. A seguir estão as vantagens das variáveis que são declaradas como este tipo de dados:
  • As variáveis podem conter a seqüência de caracteres, data, hora, valores booleanos, de ornumeric.
  • As variáveis podem converter os valores que elas containautomatically.
A desvantagem é que variáveis variant requerem pelo menos 16 bytes de memória. 16 bytes de memória pode ser significativas em procedimentos grandes ou em módulos complexos.

Para ver como isso funciona na macro Variable_Test , execute as seguintes etapas:
  1. Altere o código da 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
    
  2. Execute a macro Variable_Test .
Você não receberá um erro porque você pode atribuir qualquer coisa a variáveis variant x e y.

Observação Você também pode deixar de fora a linha a seguir e a macro continuará funcionando como as variáveis x e y são tratados como tipos de dados Variante:
Dim x, y

Escopo de uma variável

Quando você declara uma variável, podem ou não podem 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 particular no nível de procedimento, nível de módulo e pública de nível de módulo. O escopo depende de como e onde você declarar a variável ou variáveis.

Escopo em nível de procedimento

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

Para verificar se uma variável com escopo em nível de procedimento não é vista fora do procedimento onde ele é declarado, siga estas etapas:
  1. Insira um novo módulo no seu projeto.
  2. Digite ambas as seguintes macros para este módulo:
    Sub Macro1()
    Dim x As Integer
    x = 10
    MsgBox "x, as seen by Macro1 is " & x
    'the next line runs Macro2
    Macro2
    End Sub
    Sub Macro2()
    MsgBox "x, as seen by Macro2 is " & x
    End Sub
    
  3. Execute Macro1.

    Você recebe a seguinte mensagem:
    x, como visto por Macro1 é 10
  4. Clique em OK.

    Mensagem asseguintes:
    x, como visto por Macro2is
  5. Clique em OK.
Macro2 não mostra um valor para a variável x porque a variável x é local Macro1.

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

Você pode definir as 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 , a instrução Dim ou a instrução Public . Se você colocar a instrução Public na frente de sua variável, a variável estará disponível para todas as macros em todos os módulos no projeto. Se você colocar a instrução Dim ou a instrução na frente de sua variável, a variável está disponível somente para macros no módulo em que está sendo declarado.

Para ver a diferença entre a instrução Public e a instrução Dim , siga estas etapas:
  1. Salvar e fechar as pastas de trabalho abertas e, em seguida, abrir um newworkbook.
  2. Inicie o Editor do Visual Basic.
  3. Insira um módulo em seu projeto.
  4. Digite o seguinte código para este módulo:
    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. Digite o seguinte código para este módulo:
    Sub Macro2()
    x = x * 3
    MsgBox x
    End Sub
    
  7. Execute a macro Macro_1a no primeiro módulo.

    Com a variável x declaredas "Pública x As Integer", todos os três macros no projeto tem acesso para o valor de x. A primeira caixa de mensagem exibe um valor de 10. A segunda messagebox 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 x foi alterado para 20 em Macro_1b e, em seguida, ele foi multiplicado por 3 em Macro2).
  8. Altere a linha de declaração no primeiro módulo do:
    Public x As Integer

    para:
    Dim x As Integer
  9. Execute a macro Macro_1a .

    Com a variável x declarados como "Dim x AsInteger", somente as macros no primeiro módulo tem acesso ao valor de x. Sothe primeiro caixa de mensagem exibe um valor de 10, a segunda caixa de mensagem exibe avalue de 20, (porque x é multiplicado por 2 em Macro_1b) e a terceira caixa de mensagem exibe um valor de 0 (porque Macro2 não verá o valor de x e o valor não inicializado de zerois usada por Macro 2).
  10. Altere a linha de declaração no primeiro módulo do:
    Dim x As Integer

    para:
    Private x As Integer
  11. Execute a macro Macro_1a .
As mesmas caixas de mensagem são exibidas usando o escopo da instrução particular como estivessem usando a instrução Dim . A variável x tem o mesmo escopo, private no módulo onde ele é declarado.

Observação Se você quiser que o escopo de sua variável a ser limitado ao módulo onde ele é declarado, use a instrução em vez da instrução Dim . Ambos obter o mesmo efeito, mas o escopo é mais claro quando você lê o código se você usar a instrução .

Tempo de vida de uma variável

O tempo durante o qual uma variável reterá seu valor é conhecido como seu ciclo de vida. O valor de uma variável pode mudar ao longo do seu ciclo de vida, mas ela manterá um valor. Além disso, quando uma variável perde o escopo, ele não tem um valor.

Inicializar o valor de uma variável

Quando você executa uma macro, todas as variáveis são inicializadas como um valor. Uma variável numérica que é inicializada para zero, uma seqüência de caracteres de comprimento variável é inicializada com uma seqüência de comprimento zero (""), e uma seqüência de caracteres de comprimento fixo é preenchida com o código ASCII 0. Variáveis Variant são inicializados para vazio. Uma variável vazia é representada por um zero em um contexto numérico e uma seqüência de comprimento zero ("") em um contexto de seqüência de caracteres.

Variáveis de nível de procedimento

Se você tiver uma variável que é declarada em uma macro usando a instrução Dim , a variável reterá seu valor desde que a macro está em execução. Se essa macro chama outras macros, o valor da variável é mantido (não disponível para outras macros que) desde que também estejam executando essas outras macros.

Para demonstrar as variáveis no nível de procedimento como trabalho, siga estas etapas:
  1. Insira um novo módulo no seu projeto.
  2. Digite ambas as seguintes macros para este módulo:
    Sub Macro1()
    'set x as a procedure level variable
    Dim x As Integer
       MsgBox "the initialized value of x is " & x
    x = 10
    MsgBox "x is " & x
    'the next line runs Macro2
    Macro2
    MsgBox "x is still " & x
    End Sub
    Sub Macro2()
    MsgBox "x, as seen by Macro2 is " & x
    End Sub
    
  3. Execute Macro1.

    Você recebe a seguinte mensagem:
    o valor inicializado de x é 0
  4. Clique em OK.

    Mensagem asseguintes:
    x é 10
  5. Clique em OK.

    Mensagem asseguintes:
    x, como visto por Macro2 é
  6. Clique em OK.

    Macro2 não mostra um valor para a variável x porque o variablex é local Macro1. Você recebe a seguinte mensagem:
    isstill x 10
  7. Clique em OK.
  8. Execute Macro1.
Você recebe as mensagens descritas nas etapas 3 a 6 porque assim Macro1 interrompidos na etapa 6, o valor da variável x foi perdido. Portanto, quando você executar novamente Macro1 na etapa 7, a primeira mensagem mostra o valor de x como zero (o valor inicializado).

Palavra-chave Static

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

Para ver como funciona a palavra-chave estática, execute as seguintes etapas:
  1. Altere o código no Macro1 para:
    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.

    Você recebe a seguinte mensagem:
    o valor inicializado de x é 0
  3. Clique em OK.

    Mensagem asseguintes:
    x é 10
  4. Clique em OK.
  5. Execute Macro1.

    Você recebe a seguinte mensagem:
    o valor de x inicializado é 10
  6. Clique em OK.

    Mensagem asseguintes:
    x é 20
  7. 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 reterá seu valor após executar Macro1 na primeira vez.

Observação Se você tiver uma variável de nível de módulo, seu tempo de vida é o mesmo como se ele fosse uma variável estática do nível de procedimento.

Para verificar o tempo de vida de uma variável de nível de módulo, execute as seguintes etapas:
  1. Altere o código no módulo que contém Macro1 ao seguinte:
    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.

    Você recebe a seguinte mensagem:
    o valor inicializado de x é 0
  3. Clique em OK.

    Mensagem asseguintes:
    x é 10
  4. Clique em OK.
  5. Execute Macro1.

    Você recebe a seguinte mensagem:
    o valor de x inicializado é 10
  6. Clique em OK.

    Mensagem asseguintes:
    x é 20
  7. 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 na primeira vez.

Redefinir um projeto para redefinir variáveis

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

Se você fazer isso para o projeto Macro1 e, em seguida, execute novamente Macro1, o valor da variável x é inicializado como zero e a primeira mensagem de erro:
o valor inicializado de x é 0
Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
843145 Descrição de procedimentos Sub do Excel no Visual Basic for Applications (Arrays)
Voltar ao início

Propriedades

ID do artigo: 843144 - Última revisão: segunda-feira, 3 de março de 2014 - Revisão: 5.0
A informação contida neste artigo aplica-se a:
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
Palavras-chave: 
kbvba kbprogramming kbinfo kbmt KB843144 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.
Clique aqui para ver a versão em Inglês deste artigo: 843144

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com