È 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