Do Loop VBA

Оператор Do…Loop в VBA. Урок №31

Цикл Do…Loop выполняет блок операторов до тех пор, пока соблюдается некоторое условное выражения.

В VBA, такой цикл может быть организован несколькими разными вариантами.

Цикл Do While…Loop в VBA

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 начинает выполнение блока операторов только в том случае, если условие равно 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

Sub myCode()
  Do
    a = a + 1
    MsgBox "Это сообщение №" & a
  Loop While a < 10
End Sub

Цикл Do Loop…Until в VBA

Sub myCode()
  Do
    a = a + 1
    MsgBox "Это сообщение №" & a
  Loop Until a > 9
End Sub

Выход из цикла с помощью Exit Do

Условие для выполнения цикла можно проверять и без указания While или Until. Для этого, в самом цикле используют условные операторы If…Then, или Select Case. А принудительный выход из цикла до его завершения реализовывают с помощью Exit Do.

Пример

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.

Main Menu