Инструкция Do...Loop
Инструкция Do...Loop используется для выполнения наборов инструкций неопределенное число раз. Набор инструкций повторяется, пока условие имеет значение True, либо пока оно не примет значение True.
Повторение инструкций, пока условие имеет значение True
Имеется два способа проверки условия в инструкции Do...Loop с помощью ключевого слова While: условие проверяется до входа в цикл; условие проверяется после хотя бы однократного выполнения цикла.
В следующей процедуре ChkFirstWhile условие проверяется до входа в цикл. Если myNum задать равным 9 вместо 20, инструкции внутри цикла выполняться не будут. В процедуре ChkLastWhile инструкции внутри цикла выполняются только один раз до того как условие примет значение False.
Sub ChkFirstWhile()
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
MsgBox "Выполнено " & counter & " итераций цикла."
End Sub
Sub ChkLastWhile()
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
MsgBox "В цикле выполнено " & counter & " итераций."
End Sub
Повторение инструкций, пока условие не примет значение True
Имеется два способа проверки условия в инструкции Do...Loop с помощью ключевого слова Until: условие проверяется до входа в цикл (как продемонстрировано в процедуре ChkFirstUntil), или условие проверяется после хотя бы однократного выполнения цикла (как показано в процедуре ChkLastUntil). Итерации продолжаются, пока условие имеет значение False.
Sub ChkFirstUntil()
counter = 0
myNum = 20
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
Loop
MsgBox "В цикле выполнено " & counter & " итераций."
End Sub
Sub ChkLastUntil()
counter = 0
myNum = 1
Do
myNum = myNum + 1
counter = counter + 1
Loop Until myNum = 10
MsgBox "В цикле выполнено " & counter & " итераций."
End Sub
Выход из цикла Do...Loop
Инструкцию Do...Loop можно завершить с помощью инструкции Exit Do. Например, для завершения бесконечного цикла используется инструкция Exit Do в блоке True инструкции If...Then...Else или инструкции Select Case. Если условие имеет значение False, цикл будет выполняться как обычно.
В следующем примере переменной myNum присваивается значение, приводящее к бесконечному циклу. Инструкция If...Then...Else проверяет условие на myNum, а затем завершает инструкцию Do...Loop, предотвращая таким образом бесконечный цикл.
Sub ExitExample()
counter = 0
myNum = 9
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
If myNum < 10 Then Exit Do
Loop
MsgBox "В цикле выполнено " & counter & " итераций."
End Sub
Примечание. Для прекращения бесконечного цикла используются клавиши ESC или CTRL+BREAK.