Uso de Instruções Do Loop

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