XL: Como utilizar o loop de estruturas no Visual Basic for Applications

ID do artigo: 141762 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Nesta página

Sumário

Quando você cria macros ou aplicativos no Visual Basic for Applications, geralmente é necessário executar várias vezes por meio de uma seção de código. Visual Basic for Applications fornece vários métodos com o qual Repetir ou "percorrer", uma seção de código.

Este artigo fornece código de exemplo que ilustra o uso dos vários loop estruturas e algoritmos que o Visual Basic for Applications fornece.

Mais Informações

Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação para uma finalidade específica. Este artigo presume que você está familiarizados com a linguagem de programação que está sendo demonstrada e com as ferramentas que são usadas para criar e depurar procedimentos. Engenheiros de suporte podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades. Quando são decidir qual estrutura de loop para usar, há várias considerações estar atento. Por exemplo:
Saber exatamente quantas vezes eu queira percorrer o código?

Em caso afirmativo, quantos?

Se não, há uma condição específica no qual que deseja que a macro para sair do loop? Se o loop condicional, deseja testar a condição antes ou após o código é executado?

Procedimentos do Visual Basic de exemplo

Os exemplos a seguintes demonstram as diversas estruturas de loop disponíveis no Visual Basic for Applications. A menos que indicado de outra forma, os exemplos assumem uma célula ou intervalo de células está selecionado. Algumas outras coisas para Observe:
  • Dentro de cada exemplo, a função de caixa de mensagem ( CaixaDeMensagem ) é usada para exibir informações. Esses exemplos, sempre que uma função MsgBox ocorre ocorre é onde você deve inserir o código a serem repetidas por meio de cada iteração do loop.
  • Alguns dos comentários no código descrevem métodos alternativos para realizar uma tarefa específica ou para realizar tarefas diferentes com código semelhante.
  • O símbolo de til (~) usado dentro de alguns dos comentários deve ser substituído pelo nome do objeto indicado [objeto colocado entre aspas, por exemplo worksheets("sheet1")] ou número de índice do objeto.

For.... Each... Next

Este exemplo usa a para ... Each ... Next instrução para percorrer todas as células de um intervalo selecionado (os comentários mostram um método alternativo):
   ' To show the contents of each cell in a selection or specific range.
   Sub for_each_demo()

      ' Or, use "In Worksheet(~).Range(~)" to specify a specific range.
      For Each cell In Selection

         ' Displays cell contents in message box.
         MsgBox cell.Value

         ' Reset cell to next object.
      Next
   End Sub
				

Para <variable> = <n1> para <n2>

' This example loops through the code a specified number of times.
   Sub for_demo()

      ' Sets x to 1, adds 1 to x until x = 5, loops 5 times.
      For x = 1 To 5 Step 1

         ' Displays value of x in msgbox.
         MsgBox x

         ' Returns to top of loop 4 times.
      Next
   End Sub
				

Do... até com teste no início do loop

Este exemplo usa uma tarefa pendente ... até loop "percorrer" para baixo uma coluna de células até que a primeira célula vazia seja alcançada. Porque a macro executa o teste no início do loop, se a primeira célula estiver vazia, o código dentro do loop não será executado.
   ' Performs Do loop, testing at top of loop.
   ' Loops until empty cell is reached.
   ' Note that you can also use a Do While Not IsEmpty(ActiveCell) loop.

   Sub test_before_do_loop()

      ' Test contents of active cell; if active cell is empty, exit loop.
      Do Until IsEmpty(ActiveCell)

         ' Displays cell contents in message box.
         MsgBox ActiveCell.Value

         ' Step down 1 row to the next cell.
         ActiveCell.Offset(1, 0).Select

        ' Return to top of loop.
      Loop
   End Sub
				

Do... até com teste no fim do loop

Este exemplo também usa um loop , mas ele testa na parte inferior do loop. A primeira linha da macro testa a primeira célula. Sem a primeira linha de código para testar a célula inicial, o código seria executado pelo menos uma vez, porque o loop testes na parte inferior.
   ' Performs Do loop, testing at bottom of loop.

   Sub test_after_do_loop()

      ' Test to see if first cell is empty.
      If IsEmpty(ActiveCell) Then Exit Sub

         ' Begin loop.
         Do

            ' Displays cell contents in message box.
            MsgBox ActiveCell.Value

            ' Steps down one row to the next cell.
            ActiveCell.Offset(1, 0).Select

            ' Test contents of active cell; if empty, exit loop
            ' or Loop While Not IsEmpty(ActiveCell).

         Loop Until IsEmpty(ActiveCell)
      End Sub
				
cuidado : não branch no corpo de um While ... Wend loop sem executar a instrução While . Isso pode causar erros em tempo de execução ou outros problemas que são difíceis de localizar.

fazer ... instrução loop fornece uma maneira mais estruturada e flexível para executar um loop. Do While ... Wend loop está incluído no Visual Basic para aplicativos para compatibilidade com versões anteriores.

While... Wend Loop

Observação : O While ... Wend loop está incluído no Visual Basic para aplicativos para compatibilidade com versões anteriores.

Este exemplo usa um While ... Wend loop. Esse loop testa na parte superior do loop somente.
    ' Performs While loop, testing at top of the loop.
   Sub While_loop_demo()

      ' Sets condition of loop, while active cell is not empty.
      While Not IsEmpty(ActiveCell)

         ' Displays cell contents in message box.
         MsgBox ActiveCell.Value

         ' Step down one row to the next cell.
         ActiveCell.Offset(1, 0).Select

      ' End While loop.
      Wend
   End Sub
				

If... ThenIr para loop

Este exemplo cria um loop usando "<condition> Se <condição> e ir para rótulo de linha > "estrutura. Essa estrutura é testada na parte inferior do loop.
     Sub loop_using_goto()

      ' Test to see if first cell is empty.
      If IsEmpty(ActiveCell) Then Exit Sub

      ' Line label indicating top of loop.
   top:

      ' Displays cell contents in message box.
      MsgBox ActiveCell.Value

      ' Step down one row to the next cell.
      ActiveCell.Offset(1, 0).Select

      ' Test to see if new cell is empty.
      If Not IsEmpty(ActiveCell) Then GoTo top

   End Sub
				

Referências

Para obter mais informações sobre loop estruturas, no Editor do Visual Basic, clique no Assistente do Office, digite loops e, em seguida, clique em Pesquisar para exibir os tópicos retornados.

Para obter informações adicionais sobre como obter ajuda com forApplications do Visual Basic, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
305326OFFXP: Programação recursos para o Visual Basic for Applications
226118OFF2000: Programação recursos para o Visual Basic for Applications
163435VBA: Programação recursos para o Visual Basic for Applications
guia do usuário do Microsoft Excel Visual Basic versão 5.0 , páginas 143 151

Propriedades

ID do artigo: 141762 - Última revisão: sexta-feira, 19 de janeiro de 2007 - Revisão: 3.4
A informação contida neste artigo aplica-se a:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 5.0 Standard Edition
  • Microsoft Excel 98 for Macintosh
  • Microsoft Excel 5.0 for Macintosh
Palavras-chave: 
kbmt kbcode kbhowto kbprogramming KB141762 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 141762

Submeter comentários