VBA при грешка Отидете до 0 | Как да използвам при грешка GoTo 0 в Excel VBA?

Excel VBA при грешка отидете на 0

VBA On Error GoTo 0 е оператор за обработка на грешки, използван за деактивиране на активирания манипулатор на грешки в процедурата. Той е посочен като „Disabler Handler Disabler“.

Обработката на грешки в някой от програмните езици е майсторски клас, който всички програмисти трябва да разберат. Езикът за програмиране VBA също, и ние също имаме техники за обработка на грешки в този език за програмиране. “On Error Resume Next” активира манипулатора на грешки, а “On Error GoTo 0” ще деактивира активирания манипулатор на грешки.

И двете „При грешка възобновяване нататък“ и „При грешка GoTo 0“ са двойки, които трябва да се използват в тандем за ефективността на кода. За да се справим с грешка, трябва да започнем с изявлението „On Error Resume Next“ и за да прекратим този манипулатор на грешки трябва да използваме изявлението „On Error GoTo 0“.

Всеки ред код, написан между тези изявления, ще игнорира всякакъв вид грешка, възникнала в производството.

Как да използвам изявление за грешка GoTo 0?

Можете да изтеглите този VBA за грешка Goto 0 Excel шаблон тук - VBA за грешка Goto 0 Excel шаблон

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

Код:

 Sub On_ErrorExample1 () Работни листове ("Sheet1"). Изберете диапазон ("A1"). Стойност = 100 работни листа ("Sheet2"). Изберете диапазон ("A1"). Стойност = 100 End Sub 

Това, което прави горният код, е, че първо ще избере работния лист с име „Sheet1“ и в клетка A1 ще вмъкне стойността 100.

Код:

Работни листове ("Sheet1"). Изберете диапазон ("A1"). Стойност = 100

След това ще избере работния лист с име „Sheet2” и ще вмъкне същата стойност.

Код:

Работни листове ("Sheet2"). Изберете диапазон ("A1"). Стойност = 100

Сега имам по-долу листове в работната си книга.

Няма листове, наречени „Sheet1“ и „Sheet2“, когато стартираме кода, той ще срещне грешка като по-долу.

Тъй като няма лист, наречен „Sheet1“, той е срещнал грешка „Subscript out of range“. За да се справя с тази грешка, ще добавя оператор за обработка на грешки „При повторно въвеждане на грешка“ в горната част на макроса.

Код:

 Sub On_ErrorExample1 () При грешка Възобновяване на следващите работни листове ("Sheet1"). Изберете диапазон ("A1"). Стойност = 100 работни листа ("Sheet2"). Изберете диапазон ("A1"). Стойност = 100 End Sub 

Сега стартирайте кода и вижте какво ще се случи.

Той няма да дава никакви съобщения за грешка, тъй като е активиран операторът за обработка на грешки При грешка Възобновяване Следва .

Представете си сценария, при който трябва да игнорираме грешката в случай на липса на работен лист „Sheet1“, но трябва да уведомим, ако няма работен лист, наречен „Sheet2“.

Тъй като добавихме On Error Resume Next в горната част, той започна да се справя с грешката, но в същото време трябва да посочим колко реда трябва да игнорираме тази грешка.

В този пример просто трябва да игнорираме грешката за първия работен лист, но за втория лист нататък трябва да възникне грешка, ако няма работен лист „Sheet2“. Така че след първия код на работния лист се добавя ред за деактивиране на грешка В грешка GoTo 0.

Код:

 Sub On_ErrorExample1 () При грешка Възобновяване на следващите работни листове ("Sheet1"). Изберете диапазон ("A1"). Стойност = 100 При грешка GoTo 0 Worksheets ("Sheet2"). Изберете диапазон ("A1"). Value = 100 End Sub 

Сега изпълнете кода ред по ред, за да видите въздействието, като натиснете клавиша F8.

Сега, ако натиснете клавиша F8, след като изпълнението на кода ще премине към следващия ред и ще бъде изпълнена задачата за активен ред. Сега активната линия (жълто оцветена линия) е “On Error Resume Next” манипулатор на грешки и манипулаторът на грешки ще бъде активиран.

Сега възниква всяка грешка, тя ще бъде игнорирана, докато не изпълни манипулатора на грешки, деактивира кода “ On Error GoTo 0 ”.

В предишния опит срещнахме грешки, но натиснете клавиша F8 още веднъж и вижте магията.

Без да дава каквато и да е грешка, той възобновява изпълнението на кода, въпреки че няма работен лист „Sheet2“ за избор. Сега отново натиснете F8.

Тъй като не е имало Sheet1, той не може да вмъкне стойността в клетка A1 като 500, но това, което прави е, че ще вмъкне стойността 500 в клетка A1, който и да е работен лист е активен. Моят активен лист, когато изпълнявам кода, беше “Sheet3”, така че стойността на 100 се вмъква в клетката A1.

Сега активният ред на кода е “ On Error GoTo 0 ”, чрез натискане на клавиша F8 тази задача ще бъде изпълнена.

Since “On Error GoTo 0” is executed it has stopped the process of error handling and again starts to show errors if any occurs. Press the F8 key and see the error.

In the previous case without On Error GoTo 0, it has ignored this error as well, but since we have added error handler disabler it has started to show the error again.

Things to Remember here

  • Both On Error Resume Next and On Error GoTo 0 needs to be used as “Error Handler Enabler” and “Error Handler Disabler”.
  • Any line of codes between these two statements encounters an error it will be ignored.
  • If there is On Error GoTo 0 statement then after the exit of the subprocedure error handler will be disabled.