Guia Completo para o VBA Do While e VBA While Loops.

Aprenda Fazer Loops com Do While no VBA Excel

Formas de Loop com While no VBA Excel  – Guia Completo

Esta postagem fornece um guia completo para o VBA Do While e VBA While Loops.

Caso esteja procurando informações sobre como trabalhar com os loops For e For Each, acesse aqui.

O loop While existe para tornar o VBA compatível com um código mais antigo. No entanto, a Microsoft recomenda que se faça uso da função Do Loop, isto porque ela é mais “estruturada e flexível”. Porém, ambos os loops são abordados nesta postagem.

Para obter um guia rápido para esses loops, consulte a Tabela abaixo:

 Formato do loop Descrição  Exemplo
Do While …

Loop

Executa 0 ou mais horas enquanto a condição é verdadeiraDo While resultado = “Correto”

Loop

Do … Loop

While

Executa 1 ou mais horas enquanto a condição é verdadeiraDo

Loop While resultado = “Correto”

Do Until … Loop

Executa 0 ou mais horas enquanto a condição é verdadeira

Do Until resultado <> “Correto”

Loop

Do … Until LoopExecuta 1 ou mais horas enquanto a condição é verdadeiraDo

Loop Until resultado <> “Correto”

While … Wend

Executa 0 ou mais horas enquanto a condição é verdadeira

Nota: esse loop é considerado obsoleto.

While resultado = “Correto”

Wend

Fim do LoopSai do loopDo While i<10

i = ObterTotal

   If i < 0 Then

      Exit Do

   End If

Loop

For Loops versus Do While Loops

Quando usamos um loop For, sabemos antecipadamente quantas vezes queremos executá-lo. Por exemplo, podemos querer executar o loop uma vez para cada item em uma coleção, matriz ou dicionário.

No exemplo de código a seguir, sabemos no início de cada loop, quantas vezes ele será executado.

O Do Loop é executado nessas duas condições:

  1. Enquanto uma condição é verdadeira
    Ou
  2. Até que uma condição seja verdadeira

Em outras palavras, o número de vezes que os loops são executados não é relevante na maioria dos casos.

Condições

Uma condição é uma declaração avaliada como verdadeira ou falsa. Elas são usados principalmente com instruções Loops e If. Para ler sobre condicional If no VBA clique aqui! 

Ao criar um condição, deve-se usar sinais como: >, <, <>,>=, =.

A seguir, temos alguns exemplos de condições:

 
CondiçãoIsto é verdade quando
x < 5x é menor que 5
x <= 5x é menor ou igual a 5
x > 5x é maior que 5
x >= 5x é maior ou igual a 5
x = 5x e igual a 5
x <> 5x é diferente de 5
x > 5 e x < 10x é maior que 5 e é menor que 10
x = 2 ou x > 10x é igual a 2 ou maior que 10
Range(“A1”) = “Érica”a célula A1 contém o texto “Érica”
Range(“A1”) <> “Érica” a célula A1 não contém no texto “Érica”

Note que a expressão x = 5 é uma condição, e não deve ser confundida com x = 5 quando usado para executar tarefas. Por exemplo:

A tabela a seguir demonstra como o sinal de igual é usado em condições e atribuições:

 Equações Tipo de instrução Significado
Loop Until x = 5Condiçãox é igual a 5
Do While x = 5 Condiçãox é igual a 5
If x = 5 Then Condiçãox é igual a 5
For x = 1 To 5AtribuiçãoDefini o valor de x como 1, depois como 2 etc.
x = 5AtribuiçãoDefine o valor de x como 5
b = 6 = 5Atribuição e CondiçãoAtribui b ao resultado da condição 6 = 5
x = MyFunc (5,6)AtribuiçãoAtribui x ao valor retornado da função

Formato Do Loop

O Do Loop pode ser usado de quatro maneiras e isso geralmente causa confusão. No entanto, há apenas uma pequena diferença em cada uma delas.

  • Do está sempre no início da primeira linha e o Loop está sempre no final da última linha.
Do

Loop
  • A condição pode ser adicionada depois de qualquer linha.
Do [condição]

Loop

Do

Loop [condição]

A condição é precedida por While ou Until, o que nos dá essas quatro possibilidades:

Do While [condição]

Loop

Do Until [condição]

Loop

Do
Loop While [condição]

Do

Loop Until [condição]

Dê uma olhada em alguns exemplos, demostrados a seguir.

Exemplo: Do Loop

Imagine que, o usuário insira uma lista de itens, e cada vez que o usuário digita um item, este item é impresso na Janela de Verificação Imediata do VBA. Porém, quando o usuário digitar uma sequência em branco, a atividade se encerra.

Nesse caso, o uso do Loop For não é adequado, pois não sabemos quantos itens o usuário vai digitar. O usuário pode inserir uma sequência em branco primeiro ou na centésima tentativa. Para situações como essa, devemos usar um Do Loop.

O código a seguir mostra um exemplo disso:

Código:

Sub Exemplo_01()
Dim comand_us As String
Do
' Obter entrada do usuário
comand_us = InputBox("Digite o item")
' Imprimir na janela imediata (Ctrl G para visualizar)
Debug.Print comand_us
Loop While comand_us <> ""
End Sub

O código entra no loop e continua até atingir a linha “Loop While“. Nesse ponto, ele verifica se a condição é avaliada como verdadeira ou falsa.

  • Se a condição for avaliada como falsa, o código sai do loop e continua.
  • Se a condição for avaliada como verdadeira, o código retornará para a linha Do e executará o loop novamente.

A diferença entre ter a condição na linha Do e na linha Loop é muito simples.

Quando a condição está na linha Do, o loop pode não ser executado. Portanto, ele será executado zero ou mais vezes. Diferente de quando a condição está na linha Loop, em que o loop sempre será executado pelo menos uma vez.

No nosso último exemplo, a condição está na linha Loop, porque sempre queremos obter pelo menos um valor do usuário. No exemplo a seguir, usamos as duas versões do loop. O loop será executado enquanto o usuário não digitar a letra ‘n’.

No exemplo acima, os dois loops se comportarão da mesma maneira.

Código do exemplo acima:

' https://engenheiradoexcel.com.br/
Sub Exemplo_02()

Dim comand_us As String
' Condição inicial
Do While comand_us <> "n"
comand_us = InputBox("Insira o item para o Loop 1")
Loop

' Condição final
Do
comand_us = InputBox("Insira o item para o Loop 2")
Loop While comand_us <> "n"
End Sub

No entanto, se definirmos comand_us como ‘n’ antes do loop Do While ser iniciado, o código não entrará no loop.

O segundo loop no exemplo acima (ou seja, Loop While) sempre será executado pelo menos uma vez.

Código:

' https://engenheiradoexcel.com.br/
Sub Exemplo_03()

Dim comand_us As String
comand_us = "n"
' O loop não será executado, pois o comando é "n"
Do While comand_us <> "n"
comand_us = InputBox("Insira o item para o Loop 1")
Loop

' O loop ainda será executado pelo menos uma vez
Do
comand_us = InputBox("Insira o item para o Loop 2")
Loop While comand_us <> "n"
End Sub

While X Until

Quando você usa o Do Loop, a condição pode ser precedida por Until ou While.

Until e While são o oposto um do outro. Eles são usados no VBA de maneira semelhante à forma como são usados no inglês e no português. Se você fizer uma simples tradução, Until significa “Até” e While leva a tradução de “Enquanto”.

Por exemplo:

  • Deixe as roupas no varal até chover
  • Deixe a roupa no varal enquanto não chove

Outro exemplo:

  • Fique na cama até amanhecer
  • Fique na cama enquanto está escuro

Outro exemplo:

  • Repeta até que a contagem seja maior ou igual a dez
  • Repita enquanto a contagem for inferior a dez

Como você pode ver, usar o Until e While é exatamente a maneira oposta de escrever a mesma condição.

Exemplos de While e Until

O código a seguir mostra os loops While e Until lado a lado. Como você pode ver, a única diferença é que a condição é inversa.

Nota: Os sinais <> significa ‘não é igual’.

  • Primeiro loop: só começa se comando não for igual a n.
  • Segundo loop: só começará se comando não for igual a n.
  • Terceiro loop: é executado pelo menos uma vez antes de verificar comando.
  • Quarto loop: será executado pelo menos uma vez antes de verificar o comando.

Exemplo: Verificando Objetos

Um exemplo onde o Until e While são úteis, é na verificação de objetos. Quando um objeto não é atribuído, ele tem o valor Nothing.

Portanto, quando declaramos uma variável de pasta de trabalho no exemplo a seguir, ela tem um valor de nada até que a atribuamos a uma pasta de trabalho válida

Dim wrk As Workbook

O oposto de Nothing é Not Nothing, que é bem confuso as vezes.

Imagine que temos duas funções chamadas GetFirstWorkbook e GetNextWorkbook que retornam alguns objetos de pasta de trabalho. O código imprimi o nome da pasta de trabalho até que as funções não retornem mais uma pasta de trabalho válida.

Observe o código de amostra aqui:

Para escrever este código usando Do While seria mais confuso, pois a condição é usar o Nothing como apresentado abaixo:

Isso torna o código mais claro. Para ser sincera, a diferença muito pequena e escolher entre While e Until se resume a uma escolha pessoal.

Exit Do Loop

É possivel sair de qualquer loop Do usando a instrução Exit Do.

O código a seguir mostra um exemplo de como usar o Exit Do.

Neste caso, saímos do Do Loop se uma célula conter o texto “Localizado”.

While Wend

Este loop está em VBA para torná-lo compatível com o código mais antigo. A Microsoft recomenda que você use os loops Do, pois são mais estruturados.

Formato do VBA While Wend Loop

O loop While tem o seguinte formato:

While <Condição>
Wend

While Wend vs Do

A diferença entre o While e o Do Loop é:

  1. While só pode ter uma condição no início do loop.
  2. While não tem uma versão Until.
  3. Não há nenhuma instrução para sair de um loop While como Exit For ou Exit Do.

A condição para o While é a mesma que para o Do While. Os dois loops no código abaixo funcionam exatamente da mesma maneira:

Código:

' https://engenheiradoexcel.com/
Sub GetInput()
Dim comando As String

Do While comando <> "n"
   comando = InputBox("Insira o valor para o primeiro Loop")
Loop
While comando <> "n"
   comando = InputBox("Insira o valor para o segundo Loop")
Wend

End Sub

Loop Infinito

Mesmo que você nunca tenha escrito um código na vida, tenho certeza de que já ouviu a frase Loop Infinito. Este é um loop em que a condição nunca será atendida. Normalmente acontece quando a gente esquece de atualizar a contagem.

Temos um exemplo no código abaixo:

Neste exemplo, x é definido como 1, mas nunca é atualizado. Portanto, a condição nunca será atendida. O valor de x sempre será menor que 5.

No código a seguir, x está sendo atualizado a cada vez, para que a condição seja atendida.

Como você pode ver, usar um For Loop é mais seguro para contagem, pois ele atualiza automaticamente a contagem em um loop. A seguir, temos o mesmo exemplo usando For:

Esta é, claramente, a melhor maneira de se fazer isso. O For Loop define o valor inicial, condição e contagem em uma linha.

Claro que é possível ter um loop infinito usando For . Mas para isso leva um pouco mais de esforço.

Lidando com um Loop Infinito

Quando temos um loop infinito, o VBA não dá um erro. O código continua em execução e o editor do Visual Basic não responde.

Antigamente, era possível sair de um loop simplesmente pressionando Ctrl + Pause Break. Hoje em dia, diferentes laptops usam diferentes combinações de teclas. É uma boa ideia saber o que isso significa para o seu laptop, de modo que, se ocorrer um loop infinito, você possa interromper o código facilmente.

Você também pode sair de um loop eliminando o processo. Pressione Ctrl + Shift + Esc. Na guia Processos, procure Excel / Microsoft Excel. Clique com o botão direito e selecione “Finalizar processo”. Isso vai fechar o Excel e você poderá perder algum trabalho, por isso é muito melhor usar Ctrl + Pause Break ou equivalente.

Usando funções da planilha em vez de loops

Às vezes, você pode usar uma função da planilha em vez de usar um loop.

Por exemplo, imagine que você deseja adicionar os valores em uma lista de células. Você poderia fazer isso usando um loop, mas seria mais eficiente usar a função de planilha Soma. Esse procedimento é mais rápido e economiza muitos códigos.

É muito fácil usar funções de planilhas. Temos abaixo um exemplo de como usar a Soma e Contagem:

O exemplo a seguir usa um loop para realizar a mesma ação. Note que, é uma maneira muito mais longa de atingir o mesmo objetivo:

Conclusão

Neste artigo, vimos um guia completo de como trabalhar com Loop While no VBA Excel.

Eu sei que não é comum ler um artigo deste, como tutorial, e repetir para aprender, mas recomendo fortemente que você tome coragem de repetir todo o passo-a-passo. Desenvolva seu próprio método para nomear variáveis, veja o que funciona para você, formalize-o e use de forma consistente.

Eu penso que praticar é a melhor maneira de aprender e, embora pareça simples, é preciso se acostumar a navegar entre as telas para que no futuro você possa se tornar um usuário avançado.

O site deste pessoal aqui foi referência para este artigo. O site é muitoooo bacana com várias dicas legais de programação, mas infelizmente o conteúdo está em inglês, o que não deixa de ser uma boa referência para quem conseguir acompanhar. Eu recomendo.

Portanto, continue lendo mais sobre VBA aqui.

Um comentário sobre “Aprenda Fazer Loops com Do While no VBA Excel

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *