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