logo
Лекции_ПиОА[1]

12.2. Циклы

Применяются три типа циклов: Do...Loop, For...Next, For Each...Next.

К

Do while <условие>

<блок операторов>

Loop

ДлиннаяСтрока – текстовая переменная с исходной строкой

Подстрока – искомая в ДлиннаяСтрока подстрока

Dim позиция, счетчик

позиция = 1

Do While InStr(позиция, ДлиннаяСтрока, Подстрока)

позиция = InStr(позиция, ДлиннаяСтрока, Подстрока) + 1

счетчик = счетчик + 1

Loop

КолПодстрок = счетчик

онструкция
Do...Loop применяется для выполнения блока операторов неограниченное число раз. Существует несколько разновидностей конструкции, но каждая из них вычисляет выражение-условие, чтобы определить момент выхода из цикла. Как и в случае конструкции IfThen условие должно быть выражением, принимающим значение False (нуль) или True (не нуль). Сначала проверяет условие. Если оно ложно (False), все операторы блока операторов пропускаются. Если оно истинно (True), выполняются операторы цикла, производится возврат к оператору Do while и вновь проверяется условие. Цикл будет выполняться до тех пор, пока условие принимает значение True (Истина). Операторы тела цикла не выполняются ни разу, если при первой проверке условие не выполняется. В примере подсчитывается, сколько раз встретится заданная строка Подстрока внутри строки ДлиннаяСтрока. Для этого используется функция InStr. Цикл, выполняется пока в процессе просмотра заданной строки в ней находятся подстроки, совпадающие с заданной.

Д

Do

<блок операторов>

Loop While <условие>

Do Until <условие>

<блок операторов>

Loop

Do

<блок операторов>

Loop Until <условие>

ругая разновидность конструкции DoLoop конструкция DoLoop While, сначала выполняет операторы тела цикла, а затем проверяет условие после каждого выполнения. Эта разновидность гарантирует, что операторы тела цикла выполнятся, по крайней мере, один раз. Две другие разновидности конструкции цикла аналогичны предыдущим, за исключением того, что при помощи ключевого слова Until цикл выполняется, пока условие ложно (False). 1) Цикл Do UntilLoop не выполняется вообще или выполняется, пока <условие> не примет значение Истина. 2) Цикл DoLoop Until выполняется, по крайней мере, один раз.

К

For <переменная цикла> = <начальное значение> To <конечное значение> [Step <шаг изменения>]

<блок операторов>

Next [переменная цикла]

онструкция
For...Next. Циклы Do хорошо работают, когда не известно, сколько раз необходимо выполнить операторы цикла. Когда же число повторений заранее известно, лучше использовать цикл For...Next. В отличие от цикла Do, в цикле For используется переменная, называемая переменной или счетчиком цикла, которая увеличивается или уменьшается на заданную величину при каждом повторении цикла. Параметр переменная цикла должен быть числового типа. Параметры начальное значение, конечное значение и шаг изменения также должны быть числового типа и могут задаваться константами, переменными или выражениями со значениями одного из числовых типов. Параметр шаг изменения может быть положительным и отрицательным числом. Если он положителен, параметр начальное значение должен быть меньше или равен параметру конечное значение. Если параметр шаг изменения отрицателен, то параметр начальное значение должен быть больше или равен значению параметра конечное значение, чтобы выполнялось тело цикла. Нарушение этих соотношений приводит к невыполнению цикла. Если параметр Step не задан, то значение параметра шаг изменения по умолчанию берется равным 1. В следующем примере цикл For используется для распечатки имен всех доступных экранных шрифтов.

К

Private Sub Form_Click ()

Dim I As Integer

For i = 0 To Screen.FontCount

Debug.Print Screen.Fonts(i)

Next

End Sub

For Each <Элемент> In <Группа>

<операторы>

Next Элемент

Sub ListTableDefsO

Dim objDb As Database

Dim MyTableDef as TableDef

Set objDb = OpenDatabase("c:\vb\biblio.mdb", True, False)

For Each MyTableDef In objDb.TableDefs ()

Listl.AddItem MyTableDef.Name

Next MyTableDef

End Sub

онструкция
For EachNext. похож на цикл ForNext, но он повторяет группу операторов для каждого элемента из набора объектов или из массива, вместо повторения операторов заданное число раз. Он особенно полезен, когда неизвестно, сколько элементов содержится в наборе или массиве. Его синтаксис справа. Например, следующая процедура открывает файл Biblio.mdb и добавляет имя каждой таблицы в список. Следует помнить следующие ограничения при использовании цикла For Each...Next.