И так, мы уже познакомились с циклами for next и for each next, а в этой статье рассмотрим цикл do loop vba языка. Данный цикл vba в отличии от двух предыдущих работает не по принципу перебора, а по принципу условия, то есть… Вы задаете условие выхода или выполнения цикла, а не количество итераций. Фактически, цикл do loop это гибрид цикла for next с выражением exit for.
В зависимости от синтаксиса можно задавать условие как в начале, так и в конце…
Do while Loop VBA
Общий синтаксис:
Do While условие
Операторы
Loop
В данном случае поверка условия идет в начале, тут задается условие выполнения VBA цикла, если условие равно True, выполнение операторов продолжается. Если условие будет равно False, произойдет выполнение операторов, следующих после ключевого слова Loop. Так как проверка условия происходит до выполнения первого оператора в теле цикла, то может возникнуть ситуация, когда условие будет ложным изначально и ничего не выполнится.
Do Loop While
Общий синтаксис:
Do
Операторы
Loop While условие
Как видим, проверка условия выполнении происходит в конце, поэтому как минимум один раз произойдет выполнение оператора в теле цикла.
Do Until … Loop
Общий синтаксис:
Do Until условие
Операторы
Loop
В данном случае ключевое слово Until определяет, что происходит проверка условии не на выполнение (как в предыдущих вариантах), а на завершение VBA цикла. То есть, если условие равно TRUE, произойдет выход, иначе, продолжится выполнение операторов цикла VBA.
Do Loop Until
Общий синтаксис:
Do
Операторы
Loop Until условие
Тут происходит поверка условия выхода из цикла в конце.
Вполне возможна ситуация, когда нужно задать дополнительное условие выхода из оператора цикла VBA, для таких ситуаций служит выражение Exit Do, аналог Exit For.
Хорошо, теперь давайте напишем небольшой пример. В редакторе VBA создайте новую форму (меню Insert пункт UserForm), на ее поверхность добавьте четыре текстовые метки (класс Label) и одну кнопку (класс CommandButton). Теперь в редакторе кода для формы пропишите:
Private Sub GetSumm() Dim summ As Integer Do While summ <= 1000 summ = summ + 1 Loop Label1.Caption = summ & " - do while loop vba" summ = 0 Do summ = summ + 1 Loop While summ <= 1000 Label2.Caption = summ & " - do loop while vba" summ = 0 Do Until summ >= 1000 summ = summ + 1 Loop Label3.Caption = summ & " - do until loop vba" summ = 0 Do summ = summ + 1 Loop Until summ >= 1000 Label4.Caption = summ & " - do loop until vba" End Sub Private Sub CommandButton1_Click() 'Вызываем процедуру Call GetSumm End Sub Private Sub UserForm_Initialize() Label1.Caption = "" Label1.FontSize = 15 Label1.ForeColor = vbBlue Label2.Caption = "" Label2.FontSize = 15 Label2.ForeColor = vbGreen Label3.Caption = "" Label3.FontSize = 15 Label3.ForeColor = vbRed Label4.Caption = "" Label4.FontSize = 15 Label4.ForeColor = vbYellow CommandButton1.Caption = "Сумма" End Sub |
Процедура GetSumm отвечает за выполнение операторов цикла VBA, в которых происходит процесс суммирования чисел. Как видим, мы не задаем начального значения, а просто прибавляем число 1. Первые два цикла задают условие выполнения – значение переменной summ должно быть меньше или ровно 1000. Во вторых двух циклах мы задали условие выхода – значение переменной sum должно быть больше или равно 1000. Как видим, в первых двух случаях нам вывело число 1001, а во вторых – 1000. Фактически, при использовании ключевого слова while, количество выполнений оператора в блоке цикла было на один раз больше, чем при использовании ключевого слова Until.
И так, в этой статье мы рассмотрели использование цикла do while loop vba и do until loop vba, который может использоваться на ряду с циклами for next и for each. Однако, тут можно задавать или условие выполнения или условие завершения работы цикла. Также, для выхода из блока применяется выражение exit for. Цикл VBA do loop часто используется для создания зацикливания, например – прослушивание системы на запуск заданной программы.
Для общего развития, можете посмотреть примеры использования цикла Do Loop в языке VBScript сервера сценариев Windows Script Host, который, как уже упоминалось, является сородичем языка Visual Basic for Applications.