VBA Exit Sub | Выйти из подпроцедуры VBA, если условия не соблюдены

Подпроцедура выхода из Excel VBA

Оператор Exit Sub завершает подпроцедуру раньше, чем определенные строки кодов VBA. Однако для выхода из подпроцедуры нам нужно применить своего рода логический тест.

Построим это простыми словами.

 Sub MacroName () '...' Здесь какой-то код '... Exit Sub' Выйти из Sub без выполнения следующих строк кода ниже '...' Этот код будет проигнорирован '... End Sub 

Примеры

Вы можете скачать этот шаблон VBA Exit Sub Excel здесь - VBA Exit Sub Excel Template

Пример # 1

Для лучшего примера посмотрите на приведенный ниже код.

Код:

 Sub Exit_Example1 () Dim k до тех пор, пока k = от 1 до 10 ячеек (k, 1). Value = k Next k End Sub 

Приведенный выше код вставит серийные номера от 1 до 10 в ячейки с A1 по A10.

Теперь я хочу вставить только 5 серийных номеров, и как только значение переменной «k» станет 6, я хочу выйти из подпрограммы.

Для этого мне нужно будет добавить логический тест в Excel как IF k = 6 Then Exit Sub .

Код:

 Sub Exit_Example1 () Dim k As Long For k = от 1 до 10 Если k = 6 Then Exit Sub 'Как только значение k станет равным 6, он проигнорирует все коды и выйдет из Cells (k, 1). Value = k Next k End Sub 

Теперь запустите код построчно. Нажмите клавишу F8, чтобы начать процедуру.

На данный момент значение k равно нулю.

Чтобы изменить значение k на 1, нажмите клавишу F8 еще раз.

Таким образом, значение k равно 1, наш код продолжает работать и вставляет 1 в ячейку A1. Таким образом, продолжайте цикл, пока значение k не станет равным 6.

Теперь значение k равно 6, и строка кода собирается выполнить наш логический тест для выхода из подпроцедуры. Если я нажму клавишу F8 еще раз, произойдет выход только из всей подпроцедуры.

Как мы видим, выделено слово «Exit Sub» . При нажатии клавиши F8 выполняется выход из подпроцедуры без перехода к слову «End Sub» .

Пример # 2 - При ошибке выход из подпроцедуры

Мы также можем выйти из подпроцедуры, когда получим значения ошибок. Например, рассмотрим приведенные ниже данные о делении числа 1 от числа 2.

Ниже приведен код для деления двух чисел.

Код:

 Sub Exit_Example2 () Dim k As Long For k = 2–9 Cells (k, 3). Value = Cells (k, 1) .Value / Cells (k, 2). Value Next k End Sub 

Как мы знаем, мы не можем делить любое число на ноль. Поэтому, если мы попытаемся это сделать, мы получим ошибку как Run Time Error '11': Division By Zero.

Чтобы избежать этого, как только мы обнаружим любую ошибку, я упомяну свой макрос, чтобы немедленно выйти из подпроцедуры. Код ниже - один из таких случаев.

Код:

 Sub Exit_Example2 () Dim k As Long For k = 2–9 При ошибке Перейти к ErrorHandler Ячейки (k, 3). Value = Cells (k, 1) .Value / Cells (k, 2). Value Next k ErrorHandler: Exit Sub Конец подписки 

В приведенном выше примере я упомянул оператор «On Error Goto ErrorHandler». Здесь слово ErrorHandler - это присвоенный мной ярлык. Если вы видите внизу кода, я упомянул метку как

ErrorHandler: выход из подпрограммы 

Таким образом, как только код обнаруживает ошибку, он отправляет код для перехода к метке, а метка имеет оператор «Exit Sub», поэтому подпроцедура завершается.

Сейчас я запущу код, он будет вычислять деление, пока не обнаружит ошибку.

Как вы можете видеть в ячейке C7, возникла ошибка «Деление на ноль», поэтому подпроцедура завершилась. Без уведомления пользователя выход из подпроцедуры всегда опасен. Чтобы проинформировать пользователя об ошибке, мы можем включить одно небольшое окно сообщения.

Код:

 Sub Exit_Example2 () Dim k As Long For k = 2–9 При ошибке Перейти к ErrorHandler Cells (k, 3) .Value = Cells (k, 1) .Value / Cells (k, 2) .Value Next k ErrorHandler: MsgBox " Произошла ошибка: "& vbNewLine & Err.Description Exit Sub End Sub 

Приведенный выше код покажет сообщение об ошибке, а затем выйдет из подпроцедуры. Во время выполнения кода, если возникает ошибка, он покажет окно сообщения в VBA, как показано ниже.

Это более надежный способ выхода из подпроцедуры.