Подпроцедура за изход на Excel VBA
Изход Sub оператор излиза от подпроцедурата по-рано от дефинираните редове на VBA кодове. За да излезем от подпроцедурата обаче, трябва да приложим някакъв логически тест.
Нека да построим това с прости думи.
Sub MacroName () '…' Някакъв код тук '… Изход Sub
Примери
Пример # 1
За по-добър пример вижте кода по-долу.
Код:
Sub Exit_Example1 () Dim k Колко дълго за k = 1 до 10 клетки (k, 1). Стойност = k Следващ k Край Sub
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_2.png.webp)
Горният код ще вмъкне серийни номера от 1 до 10 в клетки A1 до A10.
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_3.png.webp)
Сега искам да вмъкна само 5 серийни номера и веднага щом стойността на променливата „k“ стане 6, искам да изляза от подменюто.
Ще трябва да добавя логическия тест в Excel като АКО k = 6 След това излез от Sub .
Код:
Sub Exit_Example1 () Dim k Колко дълго за k = 1 до 10 Ако k = 6 Тогава излезте от Sub 'Веднага след като k стойността стане 6, тя ще игнорира всички кодове и ще излезе от клетки (k, 1). Стойност = k Следващ k Край Под
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_4.png.webp)
Сега изпълнете кода ред по ред. Натиснете клавиша F8, за да започнете производството.
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_5.png.webp)
Към момента стойността k е нула.
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_6.png.webp)
За да промените стойността на k на 1, натиснете клавиша F8 още веднъж.
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_7.png.webp)
Значението k е 1, нашият код продължава да работи и ще вмъкне 1 в клетката A1. По този начин продължете да изпълнявате цикъла, докато стойността на k стане 6.
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_8.png.webp)
Сега стойността на k е 6 и редът на кода е на път да изпълни нашия логически тест за излизане от подпроцедурата. Ако натисна клавиша F8 още веднъж, направо ще премине само цялата подпроцедура.
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_9.png.webp)
Както виждаме, той подчерта думата „Exit Sub“. При натискане на клавиша F8 той ще излезе от подпроцедурата, без да преминава към думата „End Sub“.
Пример # 2 - При грешка Излезте от подпроцедурата
Също така можем да излезем от подпроцедурата, когато получим стойностите на грешката. Например, разгледайте данните по-долу за разделяне на число1 от номер 2.
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_10.png.webp)
По-долу е даден кодът за получаване на разделението на две числа.
Код:
Sub Exit_Example2 () Dim k Колкото дълго за k = 2 до 9 клетки (k, 3). Стойност = клетки (k, 1). Стойност / клетки (k, 2). Стойност Следващ k Край Sub
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_11.png.webp)
Както знаем, не можем да разделим нито едно число на нула. Така че, ако се опитаме да направим това, ще получим грешката като Грешка при време на изпълнение '11': Разделяне по нула.
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_12.png.webp)
За да избегна това веднага щом срещнем някаква грешка, ще спомена моя макрос за излизане от подпроцедурата с незабавен ефект. Кодът по-долу е един такъв случай.
Код:
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 Крайна под
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_13.png.webp)
В горния пример споменах изявлението „On Error Goto ErrorHandler.“ Тук думата ErrorHandler е етикетът, който съм задал. Ако виждате в долната част на кода, споменах марката като
ErrorHandler: Изход от Sub
Веднага щом кодът срещне грешка, той ще натисне кода, за да премине към етикета, а марката има изявлението „Exit Sub“, така че да излезе от подпроцедурата.
Сега ще стартирам кода; той ще изчислява делението, докато намери грешка.
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_14.png.webp)
Както можете да видите в клетката 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
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_15.png.webp)
Горният код ще покаже съобщението за грешка, след което излезте от подпроцедурата. Докато се изпълнява код, ако възникне грешка, той ще покаже полето за съобщение във VBA, както по-долу.
![](https://cdn.know-base.net/5523845/vba_exit_sub_exit_vba_subprocedure_if_conditions_are_not_met_16.png.webp)
Това е по-надежден начин за излизане от подпроцедурата.