VBA For Each Loop
The VBA For Each loop is a scope that defines a list of statements that are to be repeated for all items specified within a certain collection/array of items. The For Each loop, as compared to the For loop, can’t be used to iterate from a range of values specified with a starting and ending value.How to declare a For Each Loop:
For Each Iterator in Items '...Code here... Next
Items | Description |
---|---|
Iterator | The iterating variable. Used to iterate through the elements of the collection or array |
Items | A collection or array of items |
Next | Closing statement for the loop. Optionally you can specify the Iterator variable |
See examples below of how to use this kind of iteration through objects/collections.
VBA For Each example
Below a simple For Each example:
Dim x(3) as Long, xIterator as Variant x(0) = 1: x(1) = 2: x(2) = 3 For Each xIterator in x Debug.Print x Next xIterator 'Result: 1,2,3
The For Each Loop is easier to use in the sense that you need not specify a starting and ending variable value. However, the For Each loop is a treacherous loop! Using the For Each Loop is some cases will come at a high performance cost. Skip to For vs For Each to understand the dangers of using For Each.
Глаголы с to-Infinitive и -ing формой без изменения смысла в предложениях
Понятно, что можно выучить слова и употреблять их как с герундием, так и с инфинитивом, но все же есть несколько нюансов, которые нужно знать:
1. To-infinitive и -ing form
Глаголы continue (продолжать), begin (начинать), intend (намереваться), start (начинать) используются с частицей to и -ing формой:
— My brother began to run around shouting ИЛИ My brother began running around shouting. – Мой брат начал бегать и кричать.
Однако просим заметить, что сразу два герундия несовместимы в предложении:
— The days are beginning getting shorter.
Вместо этого, нужно поставить частицу to:
— The days are beginning to get shorter. – Дни становятся короче.
2. Инфинитив с пассивным залогом и дополнением
Когда после слов allow (разрешать), advise (советовать), encourage (ободрять), permit (разрешать), recommend (рекомендовать) следует дополнение или пассивная форма, то используется инфинитив:
— The teacher doesn’t allow us to eat in class. – Учитель не разрешает нам есть в классе. (В предложение присутствует дополнение – us).
— We aren’t allowed to eat in class. – Нам не разрешено есть в классе. (Passive form).
Когда после вышеупомянутых глаголов нет дополнения, то используется герундий:
— They don’t allow eating in class. – Они не разрешают есть в классе.
3. Инфинитив и Герундий со словами need, want и require
Need, require, want за ними следует to-inf, -ing form или инфинитив в пассивной форме:
— You need to redecorate your flat / Your flat needs redecorating / Your flat needs to be redecorated.
Условия
Условие — это утверждение, которое оценивается как истинное или ложное. Они в основном используются с операторами Loops и If. При создании условия вы используете такие знаки, как >, <, <>,> =, =.
Ниже приведены примеры условий
Условие | Истина, когда… |
x < 5 | x меньше 5 |
x <= 5 | x меньше либо равен 5 |
x > 5 | x больше 5 |
x >= 5 | x больше либо равен 5 |
x = 5 | x равен 5 |
x <> 5 | x не равен 5 |
x > 5 And x < 10 | x больше 5 И меньше 10 |
x = 2 Or x >10 | x равен 2 ИЛИ больше 10 |
Range(«A1») = «Иван» | Ячейка A1 содержит текст «Иван» |
Range(«A1») <> «Иван» | Ячейка A1 не содержит текст «Иван» |
Вы могли заметить x = 5 как условие. Его следует путать с х = 5, при использовании в качестве назначения.
Например
' означает: значение 6 будет храниться в х x = 6 ' означает: х равен 6? If x = 6 ' означает: х равен 6? Do While x = 6
В следующей таблице показано, как «=» используется в условиях и назначениях.
Использование «=» | Тип | Имеется в виду |
Loop Until x = 5 | Условие | x равен 5? |
Do While x = 5 | Условие | x равен 5? |
If x = 5 Then | Условие | x равен 5? |
For x = 1 To 5 | Присваивание | Установите значение x = 1, затем = 2 и т.д. |
x = 5 | Присваивание | Установите значение x=5 |
b = 6 = 5 | Присваивание и условие | Присвойте b результату условия 6 = 5 |
x = MyFunc(5,6) | Присваивание | Присвойте х значение, возвращаемое функцией |
Циклы
Последнее обновление: 30.10.2015
Еще одним видом управляющих конструкций являются циклы. В VB.NET используется несколько видов циклов.
-
For…Next
-
For Each…Next
-
While
-
Do
Цикл For…Next
В этом цикл выполняется определенное число раз, причем это число задается счетчиком:
For i As Integer = 1 To 9 Console.WriteLine("Квадрат числа {0} равен {1}", i, i * i) Next
Здесь переменная i выполняет роль счетчика. После слова To мы помещаем максимальное значение счетчика. При каждом цикле значение счетчика увеличивается
на единицу. И это значение сравнивается со значением после To. Если эти два значения равны, то цикла прекращает свою работу.
При работе с циклами мы можем увеличивать значение счетчика при каждом проходе не только на единицу, но и вообще на любое число. Для этого
нужно либо использовать ключевое слово Step и после него указать шаг цикла, на который будет увеличиваться значение счетчика, либо можно
увеличивать счетчик непосредственно в цикле:
For i As Integer = 1 To -9 Step -1 For j As Integer = 1 To 9 Console.WriteLine("Произведение чисел i и j равно {0}", i * j) j += 1 Next Next
Обратите внимание, что в качестве шага в первом цикле выбрано отрицательное значение и значение счетчика с каждым проходом уменьшается на единицу. Во внутреннем цикле счетчик j при каждом проходе увеличивается на 2, так как он по умолчанию увеличивается на единицу, и еще мы явным образом увеличиваем его в цикле на единицу
В итоге внутренний цикл отрабатывает пять раз, а внешний девять, то есть фактически получается 45 циклов.
Цикл For Each…Next
Цикл For Each осуществляет перебор элементов в определенной группе, например, в массиве или в коллекции. Предположим у нас есть некоторый массив
типа Integer и нам надо инициализировать этот массив случайными значениями и затем вывести все его элементы на экран:
'Создаем массив из пяти чисел Dim nums(4) As Integer Dim r As New Random() 'инициализируем массив For i As Integer = 0 To nums.Length - 1 nums(i) = r.Next(100) Next 'Выводим элементы массива For Each i As Integer In nums Console.Write("{0} ", i) Next
В выражении For Each мы сначала указываем переменную, которая будет принимать значения элементов массива. А после ключевого слова In
указываем группу, в которой надо перебрать все элементы.
Цикл While
В цикл While выполняется до тех пор, пока соблюдается определенное условие, указанное после слова While:
Dim j As Integer = 10 While j > 0 Console.WriteLine(j) j -= 1 End While
Цикл Do
Цикл Do, также как и цикл While, выполняется, пока соблюдается определенное условие. Однако он имеет разные формы. Так, в следующем примере
сначала проверяется условие, а затем выполняется блок кода, определенный в цикле:
Dim j As Integer = 10 Do While j > 0 Console.WriteLine(j) j -= 1 Loop
В данном случае цикл выполняется, пока значение j больше нуля. Но есть еще одна запись, где вместо слова While используется слово
Until, а цикл выполняется пока не соблюдено определенное условие, то есть пока значение j не станет меньше нуля:
Dim j As Integer = 10 Do Until j < 0 Console.WriteLine(j) j -= 1 Loop
Если изначально условие, заданное в цикле, неверно, то цикл не будет работать. Но мы можем определить проверку в конце цикла, и таким образом,
наш цикл как минимум один раз отработает:
Dim j As Integer = -1 Do Console.WriteLine(j) j -= 1 Loop Until j < 0 'либо Do Console.WriteLine(j) j -= 1 Loop While j > 0
Операторы Continue и Exit
Нередко возникает необходимость не дожидаться окончания цикла, а сразу же выйти из цикла, в случае соблюдения определенного условия. Для
этого используют оператор Exit, после которого указывают тип цикла, из которого осуществляется выход, например, :
Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 To 100 num -= 1 If num < 50 Then Exit For Next Console.WriteLine(num)
Существует и другая задача — осуществить выход не из цикла, а из текущего прохода или итерации и перейти к следующему. Для этого используют
оператор Continue, после которого указывают тип цикла, из которого осуществляется выход, например, :
Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 To 10 num -= 7 If num < 50 AndAlso num > 25 Then Continue For End If Console.WriteLine(num) Next
В данном случае мы в каждом проходе цикла вычитаем из num число 7 и затем смотрим, не принадлежит ли число num интервалу от 25 до 50.
И если принадлежит, переходим к новой итерации цикла, а если нет, то выводим его на экран.
НазадВперед
Синтаксис VBA Циклы в VBA
Циклы используются в ситуациях, когда нам нужно выполнить какое-либо действие несколько раз. Первая ситуация — мы знаем, сколько раз нужно выполнить какое-либо действие, в этом случае используется конструкция For…Next:
For iCounter = 1 to 10
MsgBox «Счетчик: » & iCounter
Чтобы указать, насколько должно прирастать значение счетчика, используется ключевое слово Step:
For iCounter = 1 to 10 Step 2
MsgBox «Счетчик: » & iCounter
Можно и уменьшать исходное значение счетчика:
For iCounter = 10 to 1 Step -2
MsgBox «Счетчик: » & iCounter
Для безусловного выхода из конструкции For…Next используется команда Exit For.
VStop = InputBox (“Введите значение останова”)
For iCounter = 1 to 10
MsgBox «Счетчик: » & iCounter
If iCounter =VInput Then Exit For
Очень часто в VBA требуется сделать какое-нибудь действие со всеми элементам коллекции или массива — перебрать все открытые документы, все листы Excel, все ячейки в определенном диапазоне и т.п. Для того, чтобы пройти циклом по всем элементам коллекции, используется команда For Each … Next:
For Each oWbk in Workbooks
При использовании этого приема можно очень просто найти и получить ссылку на нужный нам объект:
For Each oWbk in Workbooks
If oWbk.Name = «Сводка.xls» Then
Set oMyWorkBook = oWbk
В этом случае мы проходим циклом по всем элементам коллекции Workbooks (то есть открытым рабочим книгам в Excel), для каждой книги проверяем ее имя, и если мы нашли книгу с именем Сводка.xls, то мы получаем на нее ссылку и выходим из цикла. Коллекция рабочих книг — это специальная коллекция, которая умеет производить поиск в себе по имени элементов, поэтому в принципе можно было обойтись такой строкой:
Set oMyWorkBook = Workbooks(«Сводка.xls»)
Но для многих других коллекций без конструкции For Each не обойтись.
Еще одна ситуация — когда мы не знаем точно, сколько раз должна быть выполнена та или другая команда — это зависит от какого-либо условия. Используются конструкции Do While…Loop и Do Until…Loop.
Конструкция Do While означает: выполнять какое-либо действие до тех пор, пока условие истинно:
Do While MyVar < 10
MyVar = MyVar + 1
MsgBox “ MyVar = “ & MyVar
Применений на практике — множество: пройти по всему набору записей, пока они не закончатся, требовать от пользователя ввести подходящее значение, пока не он наконец не введет его и т.п.
Внимание! Если вы случайно запустили в своей программе бесконечный цикл, нажмите на клавиши +. Откроется окно, аналогичное представленному на рис
3.1, в котором вы сможете продолжить выполнение, завершить его или открыть ваш код в отладчике.
Рис. 3.1 Выполнение макроса остановлено по <Ctrl>+<Break>
Второй вариант — Do Until. Все выглядит точно так же, за одним исключением: цикл будет выполняться до тех пор, пока условие ложно.
Do Until MyVar >= 10
MyVar = MyVar + 1
MsgBox “ MyVar = “ & MyVar
Можно переписать цикл так, чтобы условие проверялось после завершения цикла:
MyVar = MyVar + 1
WScript.Echo “MyVar = “ & MyVar
Loop While MyVar < 10
В этом случае цикл будет выполнен по крайней мере один раз.
Немедленный выход из цикла можно произвести по команде Exit Do.
В VBA имеется также конструкция While … Wend. Это — еще один вариант цикла, который оставлен для обратной совместимости с первыми версиями Visual Basic. Функциональные возможности — те же, что и у конструкции Do…While:
Бесконечный цикл
Даже если вы никогда не писали код в своей жизни, я уверен, что вы слышали фразу «Бесконечный цикл». Это цикл, в котором условие никогда не будет выполнено. Обычно это происходит, когда вы забыли обновить счетчик.
Следующий код показывает бесконечный цикл
Dim cnt As Long cnt = 1 'это бесконечный цикл Do While cnt <> 5 Loop
В этом примере cnt установлен в 1, но он никогда не обновляется. Поэтому условие никогда не будет выполнено — cnt всегда будет меньше 5.
В следующем коде cnt обновляется каждый раз, поэтому условие будет выполнено.
Dim cnt As Long cnt = 1 Do While cnt <> 5 cnt = cnt + 1 Loop
Как вы можете видеть, использование For Loop безопаснее для подсчета, поскольку оно автоматически обновляет счет в цикле. Ниже приведен тот же цикл с использованием For.
Dim i As Long For i = 1 To 4 Next i
Это явно лучший способ сделать это. Цикл For устанавливает начальное значение, условие и счет в одну строку.
Конечно, можно использовать бесконечный цикл, используя For — это потребует немного больше усилий
Dim i As Long ' Бесконечный цикл For i = 1 To 4 ' i никогда не достигнет 4 i = 1 Next i
Работа с бесконечным циклом
Когда у вас бесконечный цикл — VBA не выдаст ошибку. Ваш код будет продолжать работать, а редактор Visual Basic не будет отвечать.
Раньше вы могли выйти из цикла, просто нажав Ctrl и Break. В настоящее время разные ноутбуки используют разные комбинации клавиш. Полезно знать, как это настроено в вашем ноутбуке, чтобы в случае возникновения бесконечного цикла вы могли легко остановить код.
Вы также можете выйти из цикла, убив процесс. Нажмите Ctrl + Shift + Esc. На вкладке Процессы найдите Excel / Microsoft Excel. Щелкните правой кнопкой мыши по этому и выберите «Завершить процесс». Это закроет Excel, и вы можете потерять часть работы — так что гораздо лучше использовать Ctrl + Break или его эквивалент.
Как остановить бесконечный цикл vba
имеется макрос (см ниже), который нормально работает, но остановить работу макроса получается только кнопкой Reset в редакторе VB или путем закрытия файла. Подскажите как его можно выключить?
Const ИмяФайла7 = «C:\Alex.txt» Const ИмяФайла8 = «C:\Alex1.txt»
Public РазмерФайла7 As Long, РазмерФайла8 As Long, ПоискИзмененийВременноОтключён As Boolean Const ВременнойИнтервалМеждуПроверками = 2
Public Sub СлежениеЗаФайлом() On Error Resume Next
Do While True ‘ бесконечный цикл If Not ПоискИзмененийВременноОтключён Then If ПоискИзмененийВременноОтключён Then Exit Sub
НовыйРазмерФайла7 = CreateObject(«scripting.filesystemo bject»).GetFile(ИмяФайла7).Size If НовыйРазмерФайла7 > РазмерФайла7 Then DoFile2 (ИмяФайла7): РазмерФайла7 = НовыйРазмерФайла7
НовыйРазмерФайла8 = CreateObject(«scripting.filesystemo bject»).GetFile(ИмяФайла8).Size If НовыйРазмерФайла8 > РазмерФайла8 Then DoFile1 (ИмяФайла8): РазмерФайла8 = НовыйРазмерФайла8
End If t = Timer: While t + ВременнойИнтервалМеждуПроверками > Timer: DoEvents: Wend Loop
Цикл For…Next
Самым распространенным циклом в VBA является цикл с перечислением For…Next. Этому циклу необходимо задать границы (начальное и конечное значения счетчика) в пределах которых будет изменяться переменная цикла.
Оператор цикла имеет следующий синтаксис:
For счетчик = Начальное Значение (например, Например, For $n = 1$)
То Конечное Значение (То 10)
Step Приращение (Step 2)
или
Next
Замечание 1
Здесь переменная — это счетчик, значение переменной увеличивается или уменьшается с каждым повторением цикла. Если в конструкции цикла отсутствует Step, то приращение равно 1 (по умолчанию).
В случае если приращение отрицательно, то цикл начинает работу аналогично тому, как и при положительном и выполняет одно из двух действий˸
- в случае если значение счётчика меньше конечного значения, то выполняется выход из цикла;
- в случае если значение счётчика больше конечного значения или равно ему, то выполняются операторы цикла и счётчик уменьшается на значение приращения.
Пример 1
Необходимо вычислить значение функции$ у=sin(x)$ при $x=2,4,6,8,10$ и вывести на экран.
Решение:
$Dim \ x \ As \ Integer, y \ As \ Single$
$For \ x = 2 \ To \ 10 \ Step \ 2$
$y = Sin(x)$
$MsgBox \ Str(y)$
$Next \ x$
Для досрочного выхода из оператора цикла, т.е. до достижения счетчиком конечного значения, в конструкцию цикла нужно ввести оператор Exit For.
С учетом Exit For оператор цикла имеет следующий синтаксис:
$For \ счетчик = Начальное \ Значение$ (например, Например, $For \ n = 1$)
То Конечное Значение (То 10)
Step Приращение (Step 2)
или
Exit For
Next
The Visual Basic Do While Loop
The Do While loop repeatedly executes a section of code while a specified condition continues to evaluate to True. This is shown in the following Sub procedure, where a Do While loop is used to print out all values of the Fibonacci Sequence until the current value is greater than 1,000:
Sub Fibonacci() Dim i As Integer Dim iFib As Integer Dim iFib_Next As Integer Dim iStep As Integer
i = 1iFib_Next = 0 If i = 1 Then
Cells(i, 1).Value = iFib End Sub |
It can be seen that, in the above example, the condition iFib_Next < 1000 is tested at the start of the loop. Therefore, if the first value of iFib_Next were greater than 1,000, the loop would not be executed at all.
Another way that you can implement the Do While loop is to place the condition at the end of the loop instead of at the beginning. This causes the loop to be executed at least once, regardless of whether or not the condition initially evaluates to True.
The following code shows the form of a Do While Loop which has the condition at the end of the loop:
Do… Loop While iFib_Next < 1000 |
Syntax
Exit Do Exit For Exit Function Exit Property Exit Sub
The Exit statement syntax has these forms:
Statement | Description |
---|---|
Exit Do | Provides a way to exit a Do. Loop statement. It can be used only inside a Do. Loop statement. Exit Do transfers control to the statement following the Loop statement. When used within nested Do. Loop statements, Exit Do transfers control to the loop that is one nested level above the loop where Exit Do occurs. |
Exit For | Provides a way to exit a For loop. It can be used only in a For. Next or For Each. Next loop. Exit For transfers control to the statement following the Next statement. When used within nested For loops, Exit For transfers control to the loop that is one nested level above the loop where Exit For occurs. |
Exit Function | Immediately exits the Function procedure in which it appears. Execution continues with the statement following the statement that called the Function. |
Exit Property | Immediately exits the Property procedure in which it appears. Execution continues with the statement following the statement that called the Property procedure. |
Exit Sub | Immediately exits the Sub procedure in which it appears. Execution continues with the statement following the statement that called the Sub procedure. |
Оператор цикла «For» в Visual Basic
Структура оператора цикла For в Visual Basic может быть организована в одной из двух форм: как цикл For … Next или как цикл For Each.
Цикл «For … Next»
Цикл For … Next использует переменную, которая последовательно принимает значения из заданного диапазона. С каждой сменой значения переменной выполняются действия, заключённые в теле цикла. Это легко понять из простого примера:
В этом простом цикле For … Next используется переменная i, которая последовательно принимает значения 1, 2, 3, … 10, и для каждого из этих значений выполняется код VBA, находящийся внутри цикла. Таким образом, данный цикл суммирует элементы массива iArray в переменной Total.
В приведённом выше примере шаг приращения цикла не указан, поэтому для пошагового увеличения переменной i от 1 до 10 по умолчанию используется приращение 1. Однако, в некоторых случаях требуется использовать другие значения приращения для цикла. Это можно сделать при помощи ключевого слова Step, как показано в следующем простом примере.
Так как в приведённом выше примере задан шаг приращения равный 0.1, то переменная dTotal для каждого повторения цикла принимает значения 0.0, 0.1, 0.2, 0.3, … 9.9, 10.0.
Для определения шага цикла в VBA можно использовать отрицательную величину, например, вот так:
Здесь шаг приращения равен -1, поэтому переменная i с каждым повторением цикла принимает значения 10, 9, 8, … 1.
Цикл «For Each»
Цикл For Each похож на цикл For … Next, но вместо того, чтобы перебирать последовательность значений для переменной-счётчика, цикл For Each выполняет набор действий для каждого объекта из указанной группы объектов. В следующем примере при помощи цикла For Each выполняется перечисление всех листов в текущей рабочей книге Excel:
Оператор прерывания цикла «Exit For»
Оператор Exit For применяется для прерывания цикла. Как только в коде встречается этот оператор, программа завершает выполнение цикла и переходит к выполнению операторов, находящихся в коде сразу после данного цикла. Это можно использовать, например, для поиска определённого значения в массиве. Для этого при помощи цикла просматривается каждый элемент массива. Как только искомый элемент найден, просматривать остальные нет необходимости – цикл прерывается.
Применение оператора Exit For продемонстрировано в следующем примере. Здесь цикл перебирает 100 записей массива и сравнивает каждую со значением переменной dVal. Если совпадение найдено, то цикл прерывается:
Циклы в VBA Access
И как Вы поняли, начнем мы с циклов, и если конкретней, то с небольшой теории.
Цикл – это действия (инструкции), которые повторяются неоднократно, и прекращают свое выполнение в зависимости от условий или просто выполняются заданное количество раз.
В VBA, как и в других языках программирования существуют несколько разновидностей циклов, и сейчас самые часто используемые мы рассмотрим.
Цикл For ….. Next – это цикл, который выполняется заданное количество раз, будь то вручную или в зависимости от значения переменной.
Данный цикл просто незаменим тогда, когда необходимо выполнять действие, определенное количество раз, синтаксис его очень прост:
For счетчик=начальное значение счетчика to конечное значение счетчика Инструкции Step (шаг итерации) Exit for (выход из цикла до срочно) Next (следующая итерация)
А теперь давайте приведем пару простых примеров для понимания, откроем Access создадим форму, добавим элемент управления «кнопка» и в обработчик события «Нажатия кнопки» вставим следующий код (предполагается, что данные действия Вы уже должны уметь, если нет то вот скриншот):
Код:
'Переменные Dim cnt As Integer Dim i As Integer Dim rezult As Integer 'Задаем количество, столько раз будет выполняться цикл cnt = 10 rezult = 0 'Сам цикл For i = 1 To cnt rezult = rezult + 1 Next 'Просто сообщение о результате выполнения цикла MsgBox "Цикл выполнился " & rezult & " раз"
Это самый простой пример, когда мы сами указали сколько раз будет выполняться наш цикл, результат будет 10 раз, теперь давайте приведем пример чуть посложней:
'Переменные Dim cnt As Integer Dim i As Integer Dim rezult As Integer 'Задаем количество, столько раз будет выполняться цикл cnt = 10 rezult = 0 'Сам цикл For i = 1 To cnt Step 2 'Если i больше 5, то выходим из цикла If i > 5 Then Exit For End If rezult = rezult + 1 Next 'Просто сообщение о результате выполнения цикла MsgBox "Цикл выполнился " & rezult & " раз"
Догадайтесь сколько раз выполнится цикл? Ответ 3 раза, потому что мы указали шаг равным 2, и еще тогда когда i стало больше 5, мы завершили цикл, т.е.
Первая итерация
i = 1
result = 1
Вторая итерация
i = 3
result = 2
Третья итерация
i = 5
result = 3
Четвертая итерация
i = 7
и вот тут мы вышли из цикла
Надеюсь понятно:)
Цикл do while ……loop – это цикл выполняется до тех пор, пока соблюдается определенное условие, которое в свою очередь проверяется до начала итерации, другими словами цикл может и не начаться, если условие сразу не выполняется.
Синтаксис:
do while условие инструкции exit do (Выход из цикла по дополнительному условию) loop (переход к следующей итерации)
пример:
Dim cnt As Integer Dim rezult As Integer cnt = 1 rezult = 0 Do While cnt < 10 If rezult > 5 Then Exit Do End If rezult = rezult + 1 cnt = cnt + 1 Loop MsgBox "Цикл выполнился " & rezult & " раз"
Здесь мы входим в цикл и сразу проверяем cnt у нас меньше 10 и если да то выполняем блок инструкций, в которых у нас стоит еще одно условие, если result стал больше 5, то просто выходим из цикла. Результат в этом случае будет 6 раз, и в этом случае мы вышли из цикла через Exit Do.
Цикл do….. loop while – это цикл выполняется до тех пор, пока соблюдается определенное условие, а вот в этой разновидности циклов условие проверяется после выполнения первой итерации, и здесь хоть одна итерация да выполнится.
Пример:
Dim cnt As Integer Dim rezult As Integer cnt = 1 rezult = 0 Do If rezult > 5 Then Exit Do End If rezult = rezult + 1 cnt = cnt + 1 Loop While cnt < 5 MsgBox "Цикл выполнился " & rezult & " раз"
Это практически такой же пример, как и предыдущий только условие проверяется после выполнения операторов в теле цикла, и для того чтобы выйти из цикла по основному условию, я изменил условие на cnt<5 и именно по этому условию мы вышли из цикла, так как когда переменная cnt достигла значения пяти то переменная rezul оставалась со значение 4, это кстати и результат.
Также существуют циклы:
Do until…..loop – цикл выполняется до тех пор пока условие не выполняется, а когда условие выполнится то произойдет завершение цикла. Проверка осуществляется до начала цикла.
Синтаксис:
Do until условие инструкции exit do (Выход из цикла по дополнительному условию) loop (переход к следующей итерации)
Do ….. until loop – тот же самый цикл только проверка осуществляется после выполнения блока инструкций.
Синтаксис:
Do инструкции exit do (Выход из цикла по дополнительному условию) loop until условие