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

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
INTRODUÇÃO
Este artigo descreve como usar variáveis em subprocedimentos do Microsoft Excel no Microsoft Visual Basic for Applications.

Voltar ao início
Mais Informações

Variáveis em um subprocedimento

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.
Voltar ao início

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 (2 bytes cada, 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áveis, 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 Integerx = 10y = 100MsgBox "the value of x is " & x & _Chr(13) & "the value of y is " & yEnd 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 você estiver tentando atribuir esse valor de sequência de caracteres à variável de inteiro x.

Voltar ao início

Resumo de tipo de dados

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

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; 4.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 sequência de caracteres

Voltar ao início

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 sequê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 essas etapas:
  1. Altere o código da macro Variable_Test para:
    Sub Variable_Test()Dim x, yx = "string"y = 1.23MsgBox "the value of x is " & x & _Chr(13) & "the value of y is " & yEnd 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

Voltar ao início

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.

Voltar ao início

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 Integerx = 10MsgBox "x, as seen by Macro1 is " & x'the next line runs Macro2Macro2End SubSub Macro2()MsgBox "x, as seen by Macro2 is " & xEnd 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.

Voltar ao início

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 Private na frente de sua variável, a variável estará disponível somente para macros no módulo em que esteja sendo declarada.

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 no seu projeto.
  4. Digite o seguinte código para este módulo:
    Public x As IntegerSub Macro_1a()x = 10MsgBox xMacro_1bEnd SubSub Macro_1b()x = x * 2MsgBox xMacro2End Sub
  5. Insira outro módulo no seu projeto.
  6. Digite o seguinte código para este módulo:
    Sub Macro2()x = x * 3MsgBox xEnd Sub
  7. Execute a macro Macro_1a no primeiro módulo.

    Com a variável x declaredas "Public 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 Private como se estivessem usando a instrução Dim . A variável x tem o mesmo escopo, particular no módulo onde ele é declarado.

Observação: Se você quiser que o escopo de sua variável seja limitado ao módulo onde ele é declarado, use a instrução Private 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 Private .

Voltar ao início

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.

Voltar ao início

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 sequência de caracteres de comprimento variável é inicializada com uma sequência de comprimento zero (""), e uma sequê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 sequência de comprimento zero ("") em um contexto de sequência de caracteres.

Voltar ao início

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 embora) 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 variableDim x As Integer   MsgBox "the initialized value of x is " & xx = 10MsgBox "x is " & x'the next line runs Macro2Macro2MsgBox "x is still " & xEnd SubSub Macro2()MsgBox "x, as seen by Macro2 is " & xEnd Sub
  3. Execute Macro1.

    Você recebe a seguinte mensagem:
    o valor de x inicializado é 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:
    x isstill 10
  7. Clique em OK.
  8. Execute Macro1.
Você recebe as mensagens descritas as 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).

Voltar ao início

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 variableStatic x As Integer   MsgBox "the initialized value of x is " & xx = x + 10MsgBox "x is " & xEnd Sub
  2. Execute Macro1.

    Você recebe a seguinte mensagem:
    o valor de x inicializado é 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 variableSub Macro1()   MsgBox "the initialized value of x is " & xx = x + 10MsgBox "x is " & xEnd Sub
  2. Execute Macro1.

    Você recebe a seguinte mensagem:
    o valor de x inicializado é 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.

Voltar ao início

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 para zero e a primeira mensagem de erro:
o valor de x inicializado é 0
Para obter mais informações, clique no número de artigo a seguir para visualizar o artigo na Base de Conhecimento da Microsoft:
843145 Descrição dos procedimentos Sub do Excel no Visual Basic for Applications (Arrays)
sub procedimentos VBA variáveis var xl2007 xl2003 xl2000 xl2002 xl

Propriedades

ID do Artigo: 843144 - Última Revisão: 09/18/2016 00:20:00 - Revisão: 10.0

Microsoft Office Excel 2007, Microsoft Excel 2002 Standard Edition, Microsoft Excel 2000 Standard Edition, Microsoft Excel 97 Standard Edition

  • kbvba kbprogramming kbinfo kbmt KB843144 KbMtpt
Comentários