Você pode usar instruções Do...Loop para executar um bloco de instruções um número indefinido de vezes. As instruções são repetidas enquanto uma condição é Verdadeira ou até que se torne Verdadeira.
Repetição de Instruções Enquanto uma Condição for Verdadeira
Use a palavra-chave While para verificar uma condição em uma instrução Do...Loop. Você pode verificar a condição antes do início do loop (conforme mostrado no exemplo ChkFirstWhile a seguir) ou depois que o loop for executado pelo menos uma vez (conforme mostrado no exemplo ChkLastWhile). No procedimento ChkFirstWhile, se myNum for definido como 9 em vez de 20, as instruções dentro do loop nunca serão executadas. No procedimento ChkLastWhile, as instruções dentro do loop são executadas apenas uma vez porque a condição já é False.
Os exemplos a seguir ilustram o uso da palavra-chave while.
Exemplo 1:
Sub ChkFirstWhile()
Dim counter, myNum
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
'This loop made 10 repetitions."
End Sub
Exemplo 2:
Sub ChkFirstWhile()
Dim counter, myNum
counter = 0
myNum = 9
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
'This loop made 0 repetitions.
End Sub
Exemplo 3:
Sub ChkLastWhile()
Dim counter, myNum
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
'This loop made 1 repetition.
End Sub
Exemplo 4:
Sub ExampleWithDoWhile()
Dim counter, myNum
counter = 0
myNum = 15
Do While myNum > 10
myNum = myNum - 2
counter = counter + 1
Loop
' This loop reduced myNum to 9 and made 3 repetitions
End Sub
Exemplo 5:
Sub ExampleWithDoLoopWhile()
Dim counter, myNum
counter = 0
myNum = 5
Do
myNum = myNum + 1
counter = counter + 1
Loop While myNum < 10
' This loop increased myNum to 10 and made 5 repetitions.
End Sub
Exemplo 6:
Sub ChkLastWhile()
Dim counter, myNum
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
'This loop made 1 repetition.
End Sub
Repetição de Instruções até que uma Condição se Torne Verdadeira
Há duas maneiras de usar a palavra-chave Until para verificar uma condição em uma instrução Do...Loop. Você pode verificar a condição antes do início do loop (conforme mostrado no exemplo ChkFirstUntil a seguir) ou depois que o loop for executado pelo menos uma vez (conforme mostrado no exemplo ChkLastUntil). Enquanto a condição for False, o loop ocorrerá.
Os exemplos a seguir ilustram o uso da palavra-chave until.
Exemplo 1:
Sub ChkFirstUntil()
Dim counter, myNum
counter = 0
myNum = 20
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
Loop
'This loop made 10 repetitions.
End Sub
Exemplo 2:
Sub ChkLastUntil()
Dim counter, myNum
counter = 0
myNum = 1
Do
myNum = myNum + 1
counter = counter + 1
Loop Until myNum = 10
'This loop made 9 repetitions.
End Sub
Exemplo 3:
Sub ExampleWithDoUntil()
Dim counter, myNum
counter = 0
myNum = 20
Do Until myNum < 15
myNum = myNum - 2
counter = counter + 1
Loop
'This loop reduced myNum to 14 and made 3 repetitions.
End Sub
Exemplo 4:
Sub ExampleWithDoLoopUntil()
Dim counter, myNum
counter = 0
myNum = 5
Do
myNum = myNum + 2
counter = counter + 1
Loop Until myNum >= 15
'This loop increased myNum to 15 and made 5 repetitions.
End Sub
Saída de uma Instrução Do...Loop de Dentro do Loop
Você pode sair de uma instrução Do...Loop usando a instrução Exit Do. Como normalmente só é desejável sair do loop em determinadas situações (por exemplo, para evitar um loop infinito), você deve usar a instrução Exit Do no bloco de instruções True de uma instrução If...Then...Else. Se a condição for False, o loop será executado como de costume.
No exemplo a seguir, é atribuído um valor a myNum que cria um loop infinito. A instrução If...Then...Else verifica essa condição, o que evita uma repetição interminável.
Os exemplos a seguir ilustram o uso da instrução Do Loop:
Exemplo 1:
Sub ExitExample()
Dim counter, myNum
counter = 0
myNum = 9
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
If myNum < 10 Then Exit Do
Loop
'This loop made 1 repetition.
End Sub
Exemplo 2:
Sub PreventEndlessLoop()
Dim counter, myNum
counter = 1
myNum = 0
Do
myNum = myNum + 1
counter = counter + 1
If counter > 10 Then
Exit Do ' Avoids endless loop by exiting after 10 iterations.
End If
Loop
'This loop made 11 repetitions.
End Sub
Exemplo 3:
Sub ExampleWithDoWhile()
Dim counter, myNum
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 2
counter = counter + 1
If myNum < 15 Then Exit Do ' Exit the loop early if myNum is less than 15.
Loop
'This loop reduced myNum to 14 and made 3 repetitions.
End Sub
Exemplo 4:
Sub NestedLoopsExample()
Dim i, j
For i = 1 To 3
j = 0
Do
j = j + 1
If j > 2 Then Exit Do ' Exit inner loop after 2 iterations.
Loop
Next
End Sub