Циклы

При создании процедур и функций часто возникают ситуации, когда одни и те же действия требуется повторить несколько раз. Для описания повторного исполнения инструкции или группы инструкций пользуются специальными управляющими конструкциями 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

End Sub

ПРИМЕЧАНИЕ

Объект Debug совместно с методом Print позволяет выполнять печать в режиме
отладки. При использовании этого метода в процедуре значения аргументов метода
выводятся в специальное окно редактора
VBAImmediate. При выполнении программного кода вне среды редактора VBA, когда окно Immediate закрыто, инструк­ция, содержащая объект Debug, не оказывает никакого влияния на выполнение процедуры.

 

Сайт управляется системой uCoz