Циклы
При создании
процедур и функций часто возникают ситуации, когда одни и те же действия
требуется повторить несколько раз. Для описания повторного исполнения
инструкции или группы инструкций пользуются специальными управляющими
конструкциями VBA — циклами. Циклы подразделяются
на два типа: с управляющим условием и с управляющим перечислением.
В циклах с
управляющим условием инструкция или группа инструкций повторяется до тех пор,
пока не будет выполнено управляющее условие. По названию инструкции,
составляющей основу этой управляющей конструкции, такие циклы называются циклами
Do. В зависимости от
типа управляющего условия и времени его проверки (относительно выполнения
повторяющихся инструкций) различают четыре вида циклов Do. В листинге 14.10 приведены примеры использования всех четырех
видов цикла Do для решения одной и той же
задачи: сколько раз подряд из числа 25 можно извлечь квадратный корень, чтобы в
результате получилось число, не превышающее единицу более,
чем на одну сотую.
Листинг 14.10. Типы циклов Do
Sub Main()
Dim число As Single
Dim повторения As Integer
повторения = О
число = 25
'Цикл Do первого типа
Do While число - 1 >= 0.01
число
= Sqr(число)
повторения = повторения +1
Loop
MsgBox (повторения)
повторения =0
число
= 25
'Цикл
Do второго типа
Do
число
= Sqr(число)
повторения
= повторения + 1
Loop While число- 1 >= 0.01
MsgBox (повторения)
повторения = О
число =25
'Цикл
Do третьего типа
Do Until число- 1 < 0.01
число
= Sqr(число)
повторения = повторения + 1
Loop
MsgBox (повторения)
повторения =0
число =25
'Цикл Do четвертого типа
Do
число
= Sqr(число)
повторения = повторения +1
Loop Until число- 1 <
0.01
MsgBox (повторения)
End Sub
В цикле Do первого типа условие
проверяется до начала выполнения повторяющихся инструкций. Если условие
оказывается выполненным (при вычислении логического выражения получается
значение ИСТИНА), инструкции, заключен-
ные между инструкциями Do и Loop (тело цикла), выполняются
однократно, затем управление снова передается на инструкцию Do, и процесс повторяется. Если управляющее условие не
выполняется, то повторяющаяся группа инструкций пропускается и выполняется
инструкция, следующая непосредственно за инструкцией Loop.
В цикле Do второго типа условие
проверяется после выполнения тела цикла. Цикл повторяется, пока
управляющее условие выполняется.
В цикле Do третьего типа условие
проверяется до начала выполнения повторяющихся инструкций, но тело
цикла выполняется только в том случае, когда управляющее условие не
выполнено (при вычислении логического выражения получается значение ЛОЖЬ).
В цикле Do четвертого типа условие
проверяется после выполнения тела цикла. Цикл повторяется, пока
управляющее условие не выполняется.
Циклами с
управляющим перечислением пользуются в случаях, когда заранее известно
количество повторений тела цикла и проверять
управляющее условие нет необходимости. Циклы с управляющим перечислением
подразделяются на циклы со счетчиком и циклы по совокупности.
В циклах со
счетчиком используется специальная переменная —- счетчик,
значение которой при каждом повторении тела цикла увеличивается или уменьшается
на заданную величину (шаг цикла). Цикл завершается после того, как
значение счетчика достигнет (или превысит) конечное значение счетчика цикла.
Если в процессе выполнения цикла значения счетчика убывают (отрицательный шаг
цикла), цикл завершается, когда значение счетчика станет равным или меньшим
конечного значения. В листинге 14.11 приведен синтаксис цикла со счетчиком и
пример процедуры, вычисляющей суммы значений, содержащихся в нечетных ячейках
первого столбца первого листа текущей рабочей книги Excel (в пределах первых 10 ячеек).
Листинг
14.11. Цикл со счетчиком
For счетчик = начальное_значение То конечное_значение Step шаг_цикла
<тело цикла>
Next счетчик
Sub Цикл_Fог()
Dim I As Integer
Dim S As Long
S = 0
For I = 1 To 10 Step 2
S = S + Application.Worksheets(1).Cells(I,
1).Value
Next I MsgBox (S)
End Sub
В циклах по
совокупности тело цикла поочередно повторяется для всех однородных
объектов, составляющих массив или семейство. В этом случае в роли счетчика
выступает объектная переменная. В листинге 14.12 приведены
синтаксис цикла и пример, в котором он используется для вывода на печать имен
всех рабочих листов в текущей рабочей книге Excel.
Листинг
14.12. Цикл по совокупности
For Each элемент In совокупность
<тело цикла>
Next элемент
Sub Цикл_по_совокупности()
Dim S As
Worksheet
For Each S In
Application.Worksheets
Debug.Print S.Name
Next S
ПРИМЕЧАНИЕ
Объект Debug совместно с методом Print позволяет выполнять печать в режиме
отладки. При использовании этого метода в процедуре значения аргументов метода
выводятся в специальное окно редактора VBA — Immediate. При выполнении
программного кода вне среды редактора VBA, когда окно Immediate закрыто, инструкция, содержащая объект Debug, не оказывает никакого влияния на выполнение процедуры.