Один из типов циклов, который мы рассмотрим, - это циклы Do While и Do Until. Они позволяют выполнять определенный блок кода до тех пор, пока заданное условие выполняется.
Цикл Do While
Цикл Do While выполняется, пока заданное условие истинно. Вот два варианта синтаксиса:
1. С условием в начале:
Do While [условие]
' Инструкции
[Exit Do]
Loop
2. С условием в конце:
Do
' Инструкции
[Exit Do]
' Дополнительные инструкции
Loop While [условие]
Разница между ними заключается в моменте проверки условия: в первом случае блок кода может вообще не выполняться, если условие изначально ложно, а во втором случае код выполняется, как минимум, один раз.
Давайте рассмотрим пример использования цикла Do While. Ниже представлена процедура, которая вставляет даты текущего месяца в столбец активного рабочего листа, начиная с активной ячейки:
Sub EnterDates1()
' Цикл Do While, условие проверяется в начале
Dim TheDate As Date
TheDate = DateSerial(Year(Date), Month(Date), 1)
Do While Month(TheDate) = Month(Date)
ActiveCell = TheDate
TheDate = TheDate + 1
ActiveCell.Offset(1, 0).Activate
Loop
End Sub
Что делает код:
1. Sub EnterDates1(): Начало объявления подпрограммы.
2. Dim TheDate As Date: Объявление переменной TheDate как переменной типа Date для хранения дат.
3. TheDate = DateSerial(Year(Date), Month(Date): Инициализация переменной TheDate с первым днем текущего месяца, используя функции DateSerial, Year и Month.
4. Do While Month(TheDate) = Month(Date): Начало цикла Do While, где условие проверяется в начале. Цикл будет выполняться, пока месяц переменной TheDate соответствует текущему месяцу.
5. ActiveCell = TheDate: Устанавливает значение активной ячейки равным значению TheDate.
6. TheDate = TheDate + 1: Увеличивает значение TheDate на 1 день.
7. ActiveCell.Offset(1, 0).Activate: Перемещает активную ячейку на следующую строку.
8. Loop: Завершает цикл Do While.
9. End Sub: Завершение объявления подпрограммы.
Цикл Do Until
Цикл Do Until, в отличие от Do While, выполняется, пока заданное условие не станет истинным (т.е. до тех пор, пока ложь). Синтаксис аналогичен Do While, но проверка условия происходит в обратном порядке.
Вот два варианта синтаксиса для цикла Do Until:
1. С условием в начале:
Do Until [условие]
' Инструкции
[Exit Do]
Loop
2. С условием в конце:
Do
' Инструкции
[Exit Do]
' Дополнительные инструкции
Loop Until [условие]
Для иллюстрации, давайте посмотрим пример использования цикла Do Until, который выполняет те же действия, что и предыдущий пример с циклом Do While:
Sub EnterDates2()
' Цикл Do Until, условие проверяется в начале
Dim TheDate As Date
TheDate = DateSerial(Year(Date), Month(Date), 1)
Do Until Month(TheDate) <> Month(Date)
ActiveCell = TheDate
TheDate = TheDate + 1
ActiveCell.Offset(1, 0).Activate
Loop
End Sub
Оба типа циклов Do While и Do Until являются хорошими инструментами в VBA и используются в зависимости от конкретных требований задачи.