VBA Exit Sub | Вийдіть із підпроцедури VBA, якщо умови не виконуються

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

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

Побудуємо це простими словами.

 Sub MacroName () '...' Деякий код тут '... Вихід із Sub' Вихід із Sub, не виконуючи подальших рядків коду нижче '...' Цей код буде проігнорований '... End Sub 

Приклади

Завантажити цей шаблон VBA Exit Sub Excel можна тут - VBA Exit Sub Excel Template

Приклад №1

Для кращого прикладу зверніться до коду нижче.

Код:

 Sub Exit_Example1 () Dim k Надовго для k = 1 до 10 комірок (k, 1). Значення = k Наступний k Кінець Sub 

У наведеному вище коді буде вставлено серійні номери від 1 до 10 у комірки А1 до А10.

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

Для цього мені доведеться додати логічний тест у excel, якщо IF k = 6 Потім вийдіть із Sub .

Код:

 Sub Exit_Example1 () Dim k Довгий час для k = 1 до 10 Якщо k = 6 Тоді вийдіть з Sub 'Як тільки значення k стане 6, він буде ігнорувати всі коди та вийти з комірок (k, 1). Значення = k Наступний k Кінець Під 

Тепер запустіть код рядок за рядком. Натисніть клавішу 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 To 9 Cells (k, 3) .Value = Cells (k, 1) .Value / Cells (k, 2) .Value Next k End Sub 

Як ми знаємо, ми не можемо розділити жодне число на нуль. Отже, якщо ми спробуємо це зробити, ми отримаємо помилку як Помилка часу виконання '11': Розподіл нулем.

Щоб уникнути цього, як тільки ми зустрінемо будь-яку помилку, я згадаю свій макрос для виходу з підпроцедури з негайним впливом. Наведений нижче код - один із таких випадків.

Код:

 Sub Exit_Example2 () Dim k As Long For k = 2 To 9 On Error GoTo ErrorHandler Cells (k, 3) .Value = Cells (k, 1) .Value / Cells (k, 2) .Value Next k ErrorHandler: Exit Sub Кінець Sub 

У наведеному вище прикладі я згадав твердження “Про помилку перейти до ErrorHandler”. Тут слово ErrorHandler - це мітка, яку я призначив. Якщо ви бачите внизу коду, я згадав мітку як

ErrorHandler: Вихід з під 

Отже, як тільки код виявляє помилку, він натискає код, щоб перейти до мітки, і мітка має оператор “Exit Sub”, так що вийде з підпроцедури.

Тепер я запущу код, він буде обчислювати ділення, поки не знайде помилку.

Як ви можете бачити в клітинці C7, вона зіткнулася з помилкою як "Ділення за нулем", тому вона вийшла з підпроцедури. Без інформування користувача, що виходить із підпроцедури, це завжди небезпечна річ. Щоб повідомити користувача про помилку, ми можемо включити одне невелике вікно повідомлення.

Код:

 Sub Exit_Example2 () Dim k As Long For k = 2 To 9 On Error GoTo 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, як показано нижче.

Це більш надійний спосіб виходу з підпроцедури.