Estrutura Do … Loop (While, Until e Wend) – VBA

Oi pessoal!

Conforme prometido no post anterior, vamos falar da estrutura Do…Loop!

Utilizamos essa estrutura para repetir um trecho de código enquanto uma determinada condição for verdadeira, ou até que uma determinada condição torne-se verdadeira. Podemos usar dois operadores condicionais diferentes, que podem aparecer no início ou no final do trecho de código, são eles: While e Until. Com isso, temos quatro formas distintas de escrever o código, conforme veremos nos exemplos a seguir.

Essa estrutura nos permite, por exemplo, criar um código determinando que o VBA percorra as células de uma coluna, preenchendo uma fórmula em todas as células até encontrar a primeira célula vazia (“”) ou até encontrar um determinado valor.

Nos exemplos a seguir, observe que o código dentro da estrutura será executado enquanto a condição (Contador <= x) for verdadeira. Quando a condição for falsa, o primeiro comando após o laço será executado (MsgBox “Soma = ” & Soma).

Importante: o código dentro da estrutura deve ser capaz de alterar a condição de verdadeira para falsa. Caso contrário, sendo a condição sempre verdadeira, os comandos dentro da estrutura serão executados infinitamente ou até o programa travar!

Agora, vamos aos exemplos das quatro formas de escrever o código dessa estrutura! Reparem que em todas obtemos o mesmo resultado.

 

Exemplo de código com While no início do trecho de código:

Sub Do_Loop_While_no_início()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do While Contador < x

Soma = Soma + Contador

Contador = Contador + 1

Loop

MsgBox “Soma = ” & Soma

End Sub

Exemplo de código com While no final do trecho de código:

Sub Do_Loop_While_no_final()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do

Soma = Soma + Contador

Contador = Contador + 1

Loop While Contador < x

MsgBox “Soma = ” & Soma

End Sub

Nos exemplos a seguir, observe que o código dentro da estrutura será executado enquanto a condição (Contador > x) for falsa. Quando a condição for verdadeira, o primeiro comando após o laço será executado (MsgBox “Soma = ” & Soma).

Importante: o código dentro da estrutura deve ser capaz de alterar a condição de falsa para verdadeira. Caso contrário, sendo a condição sempre verdadeira, os comandos dentro da estrutura serão executados infinitamente ou até o programa travar!

Exemplo de código com Until no início do trecho de código:

Sub Do_Loop_Until_no_início()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do Until Contador >= x

Soma = Soma + Contador

Contador = Contador + 1

Loop

MsgBox “Soma = ” & Soma

End Sub

 

Exemplo de código com Until no final do trecho de código:

Sub Do_Loop_Until_no_final()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do

Soma = Soma + Contador

Contador = Contador + 1

Loop Until Contador >= x

MsgBox “Soma = ” & Soma

End Sub

Essa é uma das estruturas que mais uso no desenvolvimento de relatórios de acompanhamento de resultados em Controladoria e Finanças. Mas na prática, acabo usando o laço While … Wend, que é equivalente ao primeiro exemplo acima!

Tentem, por exemplo, executar o código abaixo. Com certeza vocês visualizarão um caixa de mensagem com a soma dos dez primeiros números maiores que zero, que é igual a 45!

 

 

Sub While_Wend()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

While Contador < x

Soma = Soma + Contador

Contador = Contador + 1

Wend

MsgBox “Soma = ” & Soma

End Sub

Abs Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.