Завершает процедуру или блок и немедленно передает управление инструкции после вызова процедуры или определения блока.
Синтаксис
Exit
Операторы
Exit Do
Немедленно завершает цикл, Do в котором он отображается. Выполнение продолжается с инструкцией, следующей за оператором Loop . Exit Do может использоваться только внутри Do цикла. При использовании во вложенных Do циклах Exit Do выходит из самого внутреннего цикла и передает управление следующему более высокому уровню вложенности.
Exit For
Немедленно завершает цикл, For в котором он отображается. Выполнение продолжается с инструкцией, следующей за оператором Next . Exit For может использоваться только в цикле For . Next или For Each . Next . При использовании во вложенных For циклах Exit For выходит из самого внутреннего цикла и передает управление следующему более высокому уровню вложенности.
Exit Function
Немедленно завершает процедуру Function , в которой она отображается. Выполнение продолжается с инструкцией, следующей за инструкцией, которая вызвала процедуру Function . Exit Function может использоваться только внутри Function процедуры.
Макросы VBA, запускающиеся при открытии, закрытии и прочих событиях (Серия VBA 14)
Чтобы указать возвращаемое значение, можно назначить значение имени функции в строке перед оператором Exit Function . Чтобы назначить возвращаемое значение и выйти из функции в одном операторе, можно использовать оператор Return.
Exit Property
Немедленно завершает процедуру Property , в которой она отображается. Выполнение продолжается с инструкцией, которая вызвала Property процедуру, то есть с инструкцией, запрашивающей или устанавливающей значение свойства. Exit Property может использоваться только в процедуре Get свойства или Set .
Чтобы указать возвращаемое значение в процедуре Get , можно назначить значение имени функции в строке перед оператором Exit Property . Чтобы назначить возвращаемое значение и выйти из Get процедуры в одном операторе Return , можно использовать оператор .
Set В процедуре Exit Property оператор эквивалентен оператору Return .
Exit Select
Немедленно выходит из Select Case блока, в котором он отображается. Выполнение продолжается с инструкцией, следующей за оператором End Select . Exit Select может использоваться только внутри Select Case оператора .
Exit Sub
Немедленно завершает процедуру Sub , в которой она отображается. Выполнение продолжается с инструкцией, следующей за инструкцией, которая вызвала процедуру Sub . Exit Sub может использоваться только внутри Sub процедуры.
Sub В процедуре Exit Sub оператор эквивалентен оператору Return .
Exit Try
Немедленно выходит из Try блока или Catch , в котором он отображается. Выполнение продолжается с блоком Finally , если он есть, или с инструкцией, следующей за оператором , в End Try противном случае. Exit Try может использоваться только внутри Try блока или Catch , а не внутри Finally блока.
Exit While
Немедленно завершает цикл, While в котором он отображается. Выполнение продолжается с инструкцией, следующей за оператором End While . Exit While может использоваться только внутри While цикла. При использовании во вложенных While циклах передает управление циклу, который является на один вложенный уровень выше цикла, Exit While где Exit While происходит.
VBA для начинающих — Первые шаги — Новый курс VBA (2)
Комментарии
Не путайте Exit операторы с End операторами . Exit не определяет конец оператора .
Пример 1
В следующем примере условие цикла останавливает цикл, если index переменная больше 100. Однако If оператор в цикле приводит к остановке Exit Do цикла, если переменная индекса больше 10.
Dim index As Integer = 0 Do While index 10 Then Exit Do End If Debug.Write(index.ToString «) index += 1 Loop Debug.WriteLine(«») ‘ Output: 0 1 2 3 4 5 6 7 8 9 10
Пример 2
В следующем примере возвращаемое значение присваивается имени myFunction функции , а затем используется Exit Function для возврата из функции:
Function MyFunction(ByVal j As Integer) As Double MyFunction = 3.87 * j Exit Function End Function
Пример 3
В следующем примере оператор Return используется для назначения возвращаемого значения и выхода из функции:
Function MyFunction(ByVal j As Integer) As Double Return 3.87 * j End Function
См. также раздел
- Оператор Continue
- Оператор Do…Loop
- Оператор End
- Оператор For Each…Next
- Оператор For…Next
- Оператор Function
- Оператор return
- Оператор Stop
- Оператор Sub
- Оператор Try. Catch. Finally
Источник: learn.microsoft.com
Оператор Exit
Выполняет выход из блока кода операторов Do…Loop, For…Next, Function, Sub или Property.
Синтаксис
Exit Do
Exit For
Exit Function
Exit Property
Exit Sub
Синтаксис оператора Exit состоит из следующих частей:
| Exit Do | Предоставляет способ выхода из . Оператор Loop . Может использоваться только в пределах оператора Do. Loop. Exit Do передает управление оператору, следующему за оператором Loop. При использовании в пределах вложенных операторов Do. Loop, Exit Do передает управление в цикл, находящийся на один вложенный уровень выше, чем цикл, где выполняется оператор Exit Do. |
| Exit For | Предоставляет способ выхода из цикла For. Его можно использовать только в for. Далее или Для каждого. Следующий цикл. Оператор Exit For передает управление оператору, следующему за оператором Next. При использовании во вложенных циклах For оператор Exit For передает управление циклу, находящемуся на один вложенный уровень выше цикла, где выполняется оператор Exit For. |
| Exit Function | Немедленно завершает процедуруFunction, в которой она отображается. Выполнение продолжается с использованием оператора, который следует за оператором, выполнившим вызов процедуры Function. |
| Exit Property | Немедленно завершает процедуру Property , в которой она отображается. Выполнение продолжается с использованием оператора, который следует за оператором, выполнившим вызов процедуры Property. |
| Exit Sub | Немедленно завершает процедуру Sub , в которой она отображается. Выполнение продолжается с использованием оператора, который следует за оператором, выполнившим вызов процедуры Sub. |
Замечания
Не следует путать операторы Exit иEnd. Оператор Exit не определяет завершение структуры.
Пример
В этом примере оператор Exit используется для выхода из цикла For. Next, процедур Do. Loop и Sub.
Sub ExitStatementDemo() Dim I, MyNum Do ‘ Set up infinite loop. For I = 1 To 1000 ‘ Loop 1000 times. MyNum = Int(Rnd * 1000) ‘ Generate random numbers. Select Case MyNum ‘ Evaluate random number. Case 7: Exit For ‘ If 7, exit For. Next. Case 29: Exit Do ‘ If 29, exit Do. Loop. Case 54: Exit Sub ‘ If 54, exit Sub procedure.
End Select Next I Loop End Sub
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?
Источник: learn.microsoft.com
Прерывание выполнения макроса или процедуры
Как уже отмечалось ранее, при помощи необязательного аргумента Buttons можно использовать VBA-процедуру MsgBox как функцию для получения выбора от пользователя в ответ на сообщения или вопросы, которые отображает процедура. Для многих простых вариантов выбора использование функции MsgBox для получения ответа от пользователя является гораздо более легким, чем получение текстового ввода с помощью функции InputBox и последующий анализ этого текста для определения того, какой выбор сделал пользователь.
При включении аргумента Buttons с необходимыми круглыми скобками оператор MsgBox работает подобно функции и отображает окно сообщения, содержащее различные командные кнопки. MsgBox возвращает численный результат, указывающий, какую командную кнопку выбрал пользователь. Число и тип командных кнопок, отображаемых диалоговым окном MsgBox, выдается с помощью аргумента Buttons.

Аргумент Buttons позволяет задавать количество и тип кнопок и наличие или отсутствие в окне сообщения одного из значков Windows. Можно также использовать аргумент Buttons для определения того, какая из отображаемых кнопок является кнопкой по умолчанию в окне сообщения. Каждый раз можно задавать только один тип кнопки, один значок и одну кнопку по умолчанию.
Как только пользователь выбирает командную кнопку в окне сообщения, VBA возвращает численное значение, соответствующее выбору пользователя. Результат функции присваивается переменной Vibor (в вышеприведенном листинге). VBA использует различные значения в зависимости от того, какую командную кнопку выбрал пользователь.
Поскольку каждая кнопка имеет свое определенное возвращаемое значение, VBA предоставляет несколько внутренних констант для представления возможных возвращаемых значений функции MsgBox. Полный список значений констант VBA, которые может возвращать MsgBox, приведен на странице «Функции VBA (ч.1). Понятие функции».
Циклы VBA (ч.1). Команды организации циклов
Какие либо действия процедуры повторяющиеся заданное количество раз или пока выполняется или не выполняется некоторое условие называют циклом.
Процесс выполнения все операторов, заключенных в структуру цикла, один раз называется итерацией цикла.
Структуры цикла, всегда выполняющиеся заданное количество раз, называются циклами с фиксированным числом итераций. Другие типы структур цикла повторяются переменное количество раз в зависимости от некоторого набора условий. Такие циклы называются неопределенными циклами.
Блок операторов, находящийся между началом и концом цикла называется «тело цикла».
Самой простой структурой цикла является фиксированный цикл.
Цикл For..Next
For counter = Start To End [Step StepSize ]
Next [ counter ]
Counter — любаячисленнаяпеременная VBA
Start — любое численное выражение, определяет начальное значение для переменной counter
End — численное выражение, определяет конечное значение для переменной counter
Statements — один, несколько или ни одного оператора VBA (тело цикла).
По умолчанию VBA увеличивает переменную counter на 1 каждый раз при выполнении операторов в цикле. Можно задать другое значение (SterSize — любое численное выражение), на которое будет изменяться counter.
Ключевое слово Next сообщает VBA о том, что достигнут конец цикла. Необязательная переменная counter после ключевого слова Next должна быть той же самой переменной counter, которая была задана после ключевого слова For в начале структуры цикла.
Ниже представлен листинг простейшего цикла For..Next, который считает сумму цифр от 1 до 10:

А теперь два варианта цикла For..Next с использованием шага цикла отличного от единицы:

Обратите внимание! При уменьшении счетчика цикла For..Next цикл выполняется, пока переменная счетчика больше или равна конечному значению, а когда счетчик цикла увеличивается, цикл выполняется, пока переменная счетчика меньше или равна конечному значению.
Цикл For Each..Next
Цикл For Each..Next не использует счетчик цикла. Циклы For Each..Next выполняются столько раз, сколько имеется элементов в определенной группе, такой как коллекция объектов или массив (которые будут рассматриваться позже). Проще говоря, цикл For Each..Next выполняется один раз для каждого элемента в группе.
For Each Element In Group
Next [ Element ]
Element — переменная, используемая для итерации по всем элементам в определенной группе
Group — это объект коллекции или массив
Statements — один, несколько или ни одного оператора VBA (тело цикла).
Цикл For Each..Next всегда выполняется столько раз, сколько имеется элементов в определенной группе.
В нижеприведенном листинге показана функция SheetExists, использующая цикл For Each..Next для определения того, существует ли определенный лист в рабочей книге Excel:

Циклы с неизвестным числом повторений
(тестирующие условия до и после выполнения тела цикла)
Существуют два основных способа создания неопределенного цикла. Можно построить цикл так, что VBA будет тестировать некоторое условие (детерминант цикла) либо перед выполнением цикла, либо — после выполнения цикла.
Цикл Do.. While
Конструкция цикла, тестирующая свое условие детерминанта до выполнения цикла.
Condition — логическое выражение для детерминанта цикла
Statements — один, ни одного или несколько операторов, которые составляют тело цикла
Loop — ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла для проверки условия
VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно True.
При выполнении цикла Do While сначала тестируется логическое выражение (Condition); если оно равно True — выполняется тело цикла. При достижении ключевого слова Loop управление опять передается в начало цикла и снова проверяется логическое выражение. Так происходит до тех пор, пока логическое выражение не станет False. Когда логическое выражение становится False — управление передается оператору, следующему за ключевым словом Loop.
Обратите внимание! Если логическое выражение равно False при первом выполнении цикла Do While, то управление сразу передается оператору, следующему за Loop, а операторы, находящиеся в теле цикла соответственно пропускаются. Другими словами говоря, цикл Do While позволяет ни разу не выполнять операторы внутри него.
В нижеприведенном листинге представлен элементарный цикл Do While, подсчитывающий сумму цифр от 1 до 10:

Цикл Do.. Until
Еще один цикл, тестирующий условие детерминанта до выполнения цикла.
Condition — логическое выражение для детерминанта цикла
Statements — один, ни одного или несколько операторов, которые составляют тело цикла
Loop — ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла для проверки условия
VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно False.
В остальном цикл Do Until полностью аналогичен циклу Do While.
Листинг, использующий цикл Do Until для подсчета цифр от 1 до 10, будет выглядеть так:

Для тестирования условий после выполнения тела цикла надо поместить логическое выражение в конец блока операторов, составляющих тело цикла, после ключевого слова Loop, которое сообщает о конце цикла.
Цикл Do.. Loop While
Конструкция цикла, тестирующая свое условие детерминанта после выполнения цикла.
Condition — логическое выражение для детерминанта цикла
Statements — один, ни одного или несколько операторов, которые составляют тело цикла
Loop — ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла после проверки условия
VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно True.
При выполнении цикла Do Loop While сначала выполняются операторы тела цикла, затем по достижении ключевого слова Loop тестируется логическое выражение (Condition); если оно равно True — управление передается в начало тела цикла и цикл повторяется снова. Так происходит до тех пор, пока логическое выражение не станет False. Когда логическое выражение становится False — управление передается оператору, следующему за строкой Loop While
Обратите внимание! Даже если при первом выполнении цикла Do Loop While логическое выражение равно False тело цикла всё равно будет выполнено. Другими словами говоря, независимо от значения логического выражения, представленного с помощью Condition, этот цикл всегда выполняется, по крайней мере, один раз.
Листинг, использующий цикл Do Loop While для подсчета цифр от 1 до 10, будет выглядеть так:

Цикл Do.. Loop Until
Еще один цикл, тестирующий условие детерминанта после выполнения цикла.
Condition — логическое выражение для детерминанта цикла
Statements — один, ни одного или несколько операторов, которые составляют тело цикла
Loop — ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла после проверки условия
VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно False.
В остальном цикл Do Loop Until полностью аналогичен циклу Do Loop While.
Листинг, использующий цикл Do Loop Until для подсчета цифр от 1 до 10, будет выглядеть так:

Следует сказать, что представленные выше примеры даны чисто в познавательных целях, чтобы можно было понять саму суть организации неопределенных циклов с проверкой условий до и после выполнения тела цикла. Сама же гибкость неопределенных циклов здесь явно не просматривается.
Вложенные циклы
Циклы можно помещать внутрь друг друга. Помещение одной структуры цикла в другую называется вложением циклов. Можно делать вложение структур циклов разного типа.
При вложении циклов надо соблюдать определенные правила:
- При вложении циклов For..Next каждый цикл должен иметь свою уникальную переменную счетчика;
- При вложении циклов For Each..Next каждый цикл должен иметь свою уникальную element-переменную;
- Если используется оператор Exit For или Exit Do во вложенном цикле, этим оператором заканчивается только выполняемый в данный момент цикл. VBA продолжает выполнение следующего цикла более высокого уровня.
В нижеприведенном листинге показан простейший пример использования вложенных циклов For..Next:

Прерывание выполнения макроса или процедуры
Зачастую программисты допускают ошибки в написании кода, которые приводят к зацикливанию программы (бесконечный цикл). Для прерывания выполнения VBA необходимо нажать клавишу Esc или комбинацию клавиш Ctrl+Break. VBA заканчивает выполнение текущего оператора, переходит в состояние ожидания и отображает окно сообщения о runtime-ошибке.
Источник: poisk-ru.ru