Основы офисного программирования и язык VBA


Цикл Do...Loop


Повторяет блок операторов, пока заданное условие является истинным или пока оно не станет истинным.

Синтаксис:

Имеется четыре варианта синтаксиса этого цикла. В двух первых вариантах условие проверяется в начале цикла:

Do [{While | Until} условие] тело цикла Loop

В других двух вариантах условие проверяется в конце цикла:

Do тело цикла Loop [{While | Until} условие]

Здесь условие является числовым или строковым выражением со значениями True или False. Вообще оно необязательно. Значение Null условия трактуется как False. Тело цикла - это последовательность операторов, которая будет выполняться, пока условие остается истинным, если перед ним стоит ключевое слово While или пока оно остается ложным - в вариантах цикла с ключевым словом Until. Таким образом, циклы вида While условие эквивалентны циклам вида Until Not условие. Кроме того, в тело цикла может входить оператор Exit Do, выполнение которого сразу прекращает цикл и передает управление оператору, непосредственно следующему за Loop. В случае нескольких вложенных циклов Do … Loop оператор Exit Do завершает лишь самый внутренний цикл, в теле которого он расположен.

Примеры.

В нашем примере реализованы три варианта поиска по образцу с проверкой условия в начале цикла, в конце цикла и в середине цикла для варианта поиска по образцу с барьером:

Public Sub Loop1() Const Size = 5 Dim X() As Integer Dim i As Integer Dim Found As Boolean Const pat = 7 'Инициализация случайными числами в интервале [1 - 10] ReDim X(1 To Size) Randomize For i = 1 To Size X(i) = Int(11 * Rnd) Next i

'Поиск по образцу с проверкой в начале цикла i = 1: Found = False Do While (i <= Size) And (Not Found) If X(i) = pat Then Found = True Else: i = i + 1 End If Loop If Found Then Debug.Print "Найден образец!" Else: Debug.Print "Образец не найден!" End If

'Поиск по образцу с проверкой в конце цикла i = 1: Found = False Do If X(i) = pat Then Found = True Else: i = i + 1 End If Loop Until Found Or (i = Size + 1) If Found Then Debug.Print "Найден образец!" Else: Debug.Print "Образец не найден!" End If

'Поиск с барьером ReDim Preserve X(1 To Size + 1) X(Size + 1) = pat i = 1 Do If X(i) = pat Then Exit Do i = i + 1 Loop If i = Size + 1 Then Debug.Print "Образец не найден!" Else: Debug.Print "Образец найден!" End If End Sub

Пример 7.5.




- Начало -  - Назад -  - Вперед -



Книжный магазин