Utilizzo dei loop Do

È possibile utilizzare le istruzioni Do...Loop per eseguire un blocco di istruzioni un numero indefinito di volte. Le istruzioni vengono ripetute se una condizione restituisce True o finché una condizione restituisce True.

Ripetizione di istruzioni quando una condizione restituisce True

Utilizzare la parola chiave While per controllare una condizione in un'istruzione Do...Loop. È possibile controllare la condizione prima di entrare nel loop (come mostrato nell'esempio ChkFirstWhile seguente) oppure controllarla dopo che il loop è stato eseguito almeno una volta (come mostrato nell'esempio ChkLastWhile). Nella routine ChkFirstWhile, se la variabile myNum è impostata su 9 anziché su 20, le istruzioni all'interno del loop non verranno mai eseguite. Nella routine ChkLastWhile, le istruzioni all'interno del loop vengono eseguite una sola volta perché la condizione è già False.

Nell'esempio seguente viene illustrato l'uso di while.

Esempio 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

Esempio 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

Esempio 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

Esempio 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

Esempio 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

Esempio 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

Ripetizione di un'istruzione finché una condizione non restituisce True

Esistono due modi per utilizzare la parola chiave Until per controllare una condizione in un'istruzione Do...Loop. È possibile controllare la condizione prima di entrare nel loop (come mostrato nell'esempio ChkFirstUntil) oppure controllarla dopo che il loop è stato eseguito almeno una volta (come mostrato nell'esempio ChkLastUntil). Se la condizione restituisce False, il loop viene eseguito.

Nell'esempio seguente viene illustrato l'uso di until.

Esempio 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

Esempio 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

Esempio 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

Esempio 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

Uscita da un'istruzione Do...Loop dall'interno del loop

È possibile uscire da un'istruzione Do...Loop utilizzando l'istruzione Exit Do. Poiché in genere si desidera uscire dal loop solo in determinate situazioni, ad esempio per evitare un loop infinito, è necessario utilizzare l'istruzione Exit Do nel blocco True di un'istruzione If...Then...Else. Se la condizione restituisce False, il loop viene eseguito come al solito.

Nell'esempio seguente, a myNum viene assegnato un valore che crea un loop infinito. L'istruzione If...Then...Else verifica la presenza di questa condizione, impedendo la ripetizione infinita del loop.

Nell'esempio seguente viene illustrato l'uso dell'istruzione do loop.

Esempio 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

Esempio 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

Esempio 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

Esempio 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