No Image

Vba выйти из цикла for

СОДЕРЖАНИЕ
2 просмотров
10 марта 2020

Циклы VBA, конструкция For. Next, конструкция For Each. Next, выход из цикла по Exit For, конструкции Do While и Do Until, выход из цикла по Exit Do, конструкция While. Wend

Циклы используются в ситуациях, когда нам нужно выполнить какое-либо действие несколько раз. Первая ситуация — мы знаем, сколько раз нужно выполнить какое-либо действие, в этом случае используется конструкция 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 +
. Откроется окно, аналогичное представленному на рис. 3.1, в котором вы сможете продолжить выполнение, завершить его или открыть ваш код в отладчике.

Рис. 3.1 Выполнение макроса остановлено по +

Второй вариант — Do Until. Все выглядит точно так же, за одним исключением: цикл будет выполняться до тех пор, пока условие ложно.

Do Until MyVar >= 10

MyVar = MyVar + 1

MsgBox “ MyVar = “ & MyVar

Можно переписать цикл так, чтобы условие проверялось после завершения цикла:

Выходит из процедуры или блока и немедленно передает управление оператору после вызова процедуры или определения блока. Exits a procedure or block and transfers control immediately to the statement following the procedure call or the block definition.

Читайте также:  Asus intel core i5 5200u

Синтаксис Syntax

Операторы Statements

Exit Do
Немедленно выходит из цикла Do , в котором он отображается. Immediately exits the Do loop in which it appears. Выполнение продолжится с оператора, следующего за оператором Loop . Execution continues with the statement following the Loop statement. Exit Do можно использовать только в цикле Do . Exit Do can be used only inside a Do loop. При использовании внутри вложенных циклов Do Exit Do выходит из внутреннего цикла и передает управление следующему более высокому уровню вложенности. When used within nested Do loops, Exit Do exits the innermost loop and transfers control to the next higher level of nesting.

Exit For
Немедленно выходит из цикла For , в котором он отображается. Immediately exits the For loop in which it appears. Выполнение продолжится с оператора, следующего за оператором Next . Execution continues with the statement following the Next statement. Exit For можно использовать только в цикле For . Next или For Each . Next . Exit For can be used only inside a For . Next or For Each . Next loop. При использовании внутри вложенных циклов For Exit For выходит из внутреннего цикла и передает управление следующему более высокому уровню вложенности. When used within nested For loops, Exit For exits the innermost loop and transfers control to the next higher level of nesting.

Exit Function
Немедленно завершает работу Function процедуры, в которой она отображается. Immediately exits the Function procedure in which it appears. Выполнение продолжится с оператора, следующего за инструкцией, вызвавшей Function процедуру. Execution continues with the statement following the statement that called the Function procedure. Exit Function можно использовать только внутри процедуры Function . Exit Function can be used only inside a Function procedure.

Чтобы указать возвращаемое значение, можно присвоить значение имени функции в строке перед оператором Exit Function . To specify a return value, you can assign the value to the function name on a line before the Exit Function statement. Чтобы присвоить возвращаемое значение и выйти из функции в одной инструкции, можно использовать оператор return. To assign the return value and exit the function in one statement, you can instead use the Return Statement.

Exit Property
Немедленно завершает работу Property процедуры, в которой она отображается. Immediately exits the Property procedure in which it appears. Выполнение продолжится с оператора, вызвавшего Property процедуру, то есть с инструкцией, запрашивающей или задавая значение свойства. Execution continues with the statement that called the Property procedure, that is, with the statement requesting or setting the property’s value. Exit Property можно использовать только внутри Get или Set процедуры свойства. Exit Property can be used only inside a property’s Get or Set procedure.

Читайте также:  Git посмотреть изменения в файле

Чтобы указать возвращаемое значение в Get процедуре, можно присвоить значение имени функции в строке перед инструкцией Exit Property . To specify a return value in a Get procedure, you can assign the value to the function name on a line before the Exit Property statement. Чтобы присвоить возвращаемое значение и выйти из процедуры Get в одном операторе, можно использовать инструкцию Return . To assign the return value and exit the Get procedure in one statement, you can instead use the Return statement.

В Set ной процедуре инструкция Exit Property эквивалентна инструкции Return . In a Set procedure, the Exit Property statement is equivalent to the Return statement.

Exit Select
Немедленно завершает работу блока Select Case , в котором он отображается. Immediately exits the Select Case block in which it appears. Выполнение продолжится с оператора, следующего за оператором End Select . Execution continues with the statement following the End Select statement. Exit Select можно использовать только внутри инструкции Select Case . Exit Select can be used only inside a Select Case statement.

Exit Sub
Немедленно завершает работу Sub процедуры, в которой она отображается. Immediately exits the Sub procedure in which it appears. Выполнение продолжится с оператора, следующего за инструкцией, вызвавшей Sub процедуру. Execution continues with the statement following the statement that called the Sub procedure. Exit Sub можно использовать только внутри процедуры Sub . Exit Sub can be used only inside a Sub procedure.

В Sub ной процедуре инструкция Exit Sub эквивалентна инструкции Return . In a Sub procedure, the Exit Sub statement is equivalent to the Return statement.

Exit Try
Немедленно завершает работу Try или Catch блока, в котором он отображается. Immediately exits the Try or Catch block in which it appears. Выполнение продолжится в блоке Finally , если таковой имеется, или с оператором, который следует в противном случае с оператором End Try . Execution continues with the Finally block if there is one, or with the statement following the End Try statement otherwise. Exit Try можно использовать только в блоке Try или Catch , а не в блоке Finally . Exit Try can be used only inside a Try or Catch block, and not inside a Finally block.

Exit While
Немедленно выходит из цикла While , в котором он отображается. Immediately exits the While loop in which it appears. Выполнение продолжится с оператора, следующего за оператором End While . Execution continues with the statement following the End While statement. Exit While можно использовать только в цикле While . Exit While can be used only inside a While loop. При использовании внутри вложенных циклов While Exit While передает управление циклу, который является одним вложенным уровнем над циклом, где происходит Exit While . When used within nested While loops, Exit While transfers control to the loop that is one nested level above the loop where Exit While occurs.

Читайте также:  Звук не идет в наушники windows 10

Заметки Remarks

Не путайте Exit инструкции с операторами End . Do not confuse Exit statements with End statements. Exit не определяет конец инструкции. Exit does not define the end of a statement.

Пример Example

В следующем примере условие цикла останавливает цикл, если index ая переменная больше 100. In the following example, the loop condition stops the loop when the index variable is greater than 100. Однако оператор If в цикле приводит к тому, что инструкция Exit Do останавливает цикл, когда переменная индекса больше 10. The If statement in the loop, however, causes the Exit Do statement to stop the loop when the index variable is greater than 10.

Пример Example

В следующем примере возвращаемое значение присваивается имени функции myFunction , а затем для возврата из функции используется Exit Function . The following example assigns the return value to the function name myFunction , and then uses Exit Function to return from the function:

Пример Example

В следующем примере оператор return используется для назначения возвращаемого значения и выхода из функции: The following example uses the Return Statement to assign the return value and exit the function:

Циклы осуществляют повторение инструкций несколько раз, и могут сэкономить много времени.

Следующий код вставляет последовательность чисел в каждую ячейку колонки A (от 1 до 12):

Этот код очень повторяющийся.

Представьте, если бы мы должны были вставлять последовательные числа в сотни ячеек вместо только 12. Теперь вы понимаете почему циклы являются очень полезными.

WHILE

Приведем пример пустого цикла While:

Пока условие будет действительным, инструкции в цикле будут продолжать выполняться (но будьте осторожны, чтобы не сделать бесконечный цикл).

Ниже есть повторяющийся макрос, который был рассмотрен сначала, преобразован в While цикл:

Используя этот цикл в макросе, все чтобы мы должны были бы сделать, если бы нам надо было 400 строк вместо 12, это заменить 12 на 400.

DO LOOP

Другой способ написать цикл, который работает так же, как While Wend (выполняется так долго, пока действительно определенное условие, содержащееся в While команде):

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

Вместо того, чтобы повторять цикл пока выполняется условие, можно выйти из цикла по условию, если мы заменим While на Until:

Цикл For будет повторяться здесь 5 раз.

При каждом повторении этого цикла, переменная i автоматически увеличивается на 1:

Комментировать
2 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector