Цикл Do…Loop выполняет блок операторов до тех пор, пока соблюдается некоторое условное выражения.
В VBA, такой цикл может быть организован несколькими разными вариантами.
Содержание урока:
Цикл Do While…Loop в VBA
Do While условие
(блок операторов)
Loop
Do While…Loop начинает выполнение блока операторов только в том случае, если условие равно True. После выполнения блока операторов, достигнув оператора Loop, цикл возвращается к оператору Do While и опять проверяет условие.
Если условие равно False, то блок операторов внутри цикла не выполняется. VBA сразу переходит к выполнению того оператора, который указан первым после Loop.
Обратите внимание на то, что в блоке операторов вы должны изменить значение выражения условие таким образом, чтобы рано, или поздно оно могло стать равным False. Иначе, ваш цикл будет выполняться бесконечно.
Пример Do While...Loop
Sub myCode()
Do While a < 10
a = a + 1
MsgBox "Это сообщение №" & a
Loop
End Sub
В данном примере, при выполнении программы, пользователь сначала увидит окно с текстом «Это сообщение №1», после нажатия на ОК, он увидит «Это сообщение №2», затем – «Это сообщение №3» и так будет продолжаться до того момента, пока переменная a не станет больше, чем 10 (то есть пока результат условия не станет равным False). Получается, что последним сообщением, которое увидит перед собой пользователь будет «Это сообщение №10».
Цикл Do Until…Loop в VBA
Do Until условие
(блок операторов)
Loop
Do Until…Loop начинает выполнение блока операторов только в том случае, если условие равно False. Принцип работы данного цикла такой же, как и у Do While…Loop с одной лишь разницей в том, что результат вычисления условного выражения должен быть равным False.
Пример Do Until...Loop
Sub myCode()
Do Until a > 9
a = a + 1
MsgBox "Это сообщение №" & a
Loop
End Sub
Как и в предыдущем примере, пользователь будет поочередно видеть окна с сообщениями. Разница этого цикла лишь в условии. Если в примере с Do While…Loop условие было «пока a не станет больше 10», то в цикле Do Until…Loop наше условие – «пока a меньше 9». Поэтому, как только значение переменной a становится равным 10 (это происходит при выводе последнего сообщения «Сейчас a=10»), результат условного выражения становится равным False и цикл останавливается.
Обратите внимание!
Циклы Do While…Loop и Do Until…Loop выполняются только после проверки условия. Соответственно, если условие не выполняется ни разу, то ни один из операторов внутри цикла, так же никогда не будет выполнен.
Поэтому, существует ещё две разновидности циклов Do…Loop, которые сначала выполняют блок операторов (хотя бы один раз) и только потом проверяют условие.
Цикл Do Loop…While в VBA
Do
(блок операторов)
Loop While условие
Sub myCode()
Do
a = a + 1
MsgBox "Это сообщение №" & a
Loop While a < 10
End Sub
Цикл Do Loop…Until в VBA
Do
(блок операторов)
Loop Until условие
Sub myCode()
Do
a = a + 1
MsgBox "Это сообщение №" & a
Loop Until a > 9
End Sub
Выход из цикла с помощью Exit Do
Условие для выполнения цикла можно проверять и без указания While или Until. Для этого, в самом цикле используют условные операторы If…Then, или Select Case. А принудительный выход из цикла до его завершения реализовывают с помощью Exit Do.
Do
(блок операторов 1)
If условие Then
Exit Do
End If
(блок операторов 2)
Loop
Пример
Sub myCode()
Dim myNum As String
myNum = InputBox("Введите цифру от 1 до 3")
Do
If myNum = "" Then
myNum = InputBox("Значение не может быть пустым. Повторите попытку")
ElseIf Len(myNum) > 1 Then
myNum = InputBox("Вы должны ввести только одну цифру. Повторите попытку")
ElseIf myNum < 1 Or myNum > 3 Then
myNum = InputBox("Значение должно быть от 1 до 3. Повторите попытку")
Else
MsgBox "Отлично. Вы ввели цифру " & myNum & Chr(13) & "Цикл будет завершён"
Exit Do 'выходим из цикла, если пользователь ввёл правильное значение (1, 2, или 3)
End If
Loop
End Sub
В данном примере, пользователю будет выводиться диалоговое окно до тех пор, пока он не введёт цифру 1, 2, или 3.
