VBA Exit Sub | Излезте от подпроцедурата на VBA, ако условията не са изпълнени

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

Изход Sub оператор излиза от подпроцедурата по-рано от дефинираните редове на VBA кодове. За да излезем от подпроцедурата обаче, трябва да приложим някакъв логически тест.

Нека да построим това с прости думи.

 Sub MacroName () '...' Някои кодове тук '... Exit Sub' Излезте от Sub, без да изпълнявате други редове на код отдолу '...' Този код ще бъде игнориран '... End Sub 

Примери

Можете да изтеглите този VBA Exit Sub Excel Template тук - VBA Exit Sub Excel Template

Пример # 1

За по-добър пример вижте кода по-долу.

Код:

 Sub Exit_Example1 () Dim k Колкото дълго за k = 1 до 10 клетки (k, 1). Стойност = k Следващ k Край Sub 

Горният код ще вмъкне серийни номера от 1 до 10 в клетки A1 до A10.

Сега искам да вмъкна само 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 Колкото дълго за k = 2 до 9 клетки (k, 3). Стойност = клетки (k, 1). Стойност / клетки (k, 2). Стойност Следващ k Край 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 Крайна под 

В горния пример споменах изявлението „On Error Goto ErrorHandler“. Тук думата ErrorHandler е етикетът, който съм задал. Ако виждате в долната част на кода, споменах етикета като

ErrorHandler: Изход от Sub 

Така че веднага щом кодът срещне грешка, той ще натисне кода, за да премине към етикета и етикетът има изявлението „Exit Sub“, така че ще излезе от подпроцедурата.

Сега ще пусна кода, той ще изчисли делението, докато намери грешка.

Както можете да видите в клетката C7, тя е срещнала грешка като „Разделяне по нула“, така че е излязла от подпроцедурата. Без да информирате потребителя, който излиза от подпроцедурата, винаги е опасно нещо. За да информираме потребителя за грешката, можем да включим едно малко поле за съобщение.

Код:

 Sub Exit_Example2 () Dim k Дълго за k = 2 до 9 при грешка 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, както по-долу.

Това е по-надежден начин за излизане от подпроцедурата.