VBA относно изявления за грешки - Топ 3 начина за справяне с грешки

Декларация за грешка в Excel VBA

VBA On Error statement е вид механизъм за обработка на грешки, който се използва за насочване на кода да прави какво, ако срещне всякакъв вид грешка, обикновено когато код срещне грешка, изпълнението спира, но с този оператор в кода изпълнението на кодът продължава, тъй като има набор от инструкции, които трябва да прави, когато срещне грешка.

Предвиждането на грешката в кода ви прави професионалист във VBA кодирането. Не можете да направите кода 100% ефективен. Дори ако сте уверени в кода си по един или друг начин, това може да доведе до грешка.

Почти невъзможна задача е да се идентифицират и обработят всякакви грешки, но имаме различни начини за обработка на грешка във VBA. Докато пишете кода, може да не очаквате вида на кода за грешка, който може да изхвърли, но ако възникне грешка, ще прекарате повече време за отстраняване на грешки, отколкото за самото писане на кода.

Какво е грешка?

Грешката не е нищо друго, но ред код не може да бъде изпълнен поради функционалността или грешния код. Затова се опитайте да предвидите грешката и да се справите с нея.

Например, ако се опитате да изтриете листа, който не е там, тогава очевидно не можем да изпълним този ред код.

Грешката е от три типа, една е компилирана грешка поради недекларирани променливи. Втората е грешка при въвеждане на данни поради грешни записи от кодера, а третата е грешка във времето на изпълнение поради VBA не може да разпознае реда на кода. За опит за достъп или работа върху работен лист или работна книга, който не е там.

Но ние имаме изявление във VBA, за да се справим с всички тези видове грешки, т.е. изявление „При грешка“.

Видове отчети за грешки

Ключовият момент за обработка на грешките в VBA е изявлението „On Error“. Например, при грешка, „възобновяване на следващия ред“, „отиване или преход към друг ред“ и т.н. …

Изявлението за грешка има три вида изявления към него.

  1. GoTo 0 означава, че всеки път, когато възникне грешка по време на изпълнение, Excel или VBA трябва да покаже полето за съобщение за грешка, казвайки вида грешка, която е срещнала. Веднага след като VBA изпълни кода, той деактивира всички манипулатори на грешки в конкретния блок на кода.
  2. Resume Next означава, че всеки път, когато възникне грешката, това изявление инструктира Excel да игнорира тази грешка и да премине към (възобновяване на следващия) следващия ред код, без да показва съобщения за грешка. Това не означава, че ще поправи грешката; по-скоро просто игнорира грешката.
  3. GoTo (етикет) означава, че когато VBA срещне грешка, отидете на назначения етикет. Това прави кода да премине към конкретния ред, предоставен от кодера.

Топ 3 начина за справяне с грешки във VBA

# 1 - След грешка възобновете

Да предположим, че разделяте стойността 20 на 0 и сте декларирали променливата, за да й присвоите резултата от делението.

Код:

Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub

Ако стартирате този код, той ще изведе грешката по-долу.

Така че не можете да разделите нито едно число на нулева стойност. Номерът на грешката във времето на изпълнение е 11, т.е. разделяне на нула.

Сега ще добавя още един ред към кода.

Код:

Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub

Сега ще добавя изявлението за възобновяване на грешка следващото отгоре.

Код:

Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub

Сега, ако изпълня този код, той няма да ми даде съобщения за грешка; по-скоро ще изпълни следващия ред код, т.е. j = 20/2.

# 2 - При грешка GoTo Label

Декларирах три променливи.

Код:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer

За всички тези три променливи ще присвоя изчисление на деление.

Код:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

Резултатът от всички тези три изчисления ще бъде показан в полето за съобщения.

Код:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "Стойността на i е" & i & vbNewLine & "Стойността на j е "& j & _ vbNewLine &" Стойността на k е "& k & vbNewLine End Sub

Сега ще се опитам да изпълня този код, тъй като изчисляването на „I“ не е правилно. Ще получим грешка във времето за изпълнение 11.

Сега ще добавя изявлението „On Error Resume Next“.

Код:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "Стойността на i е" & i & vbNewLine & "The стойността на j е "& j & _ vbNewLine &" Стойността на k е "& k & vbNewLine End Sub

Ако изпълня това, то ще пропусне изчислението „I“ и ще изпълни останалите две изчисления и резултатът е както следва.

Сега вместо „При грешка възобновяване нататък“, ще добавя „При грешка GoTo KCalculation“.

Код:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "Стойността на i е" & i & vbNewLine & "Стойността на j е" & j & _ vbNewLine & "Стойността на k е" & k & vbNewLine End Sub
Забележка: Тук „KCalculation“ е името на етикета, което бях дал; можете да дадете собствено име на етикета си без никакво място.

Сега, ако изпълня този ред код, той няма да премине към следващия ред. По-скоро ще премине към името на етикета, което съм въвел, т.е. „KCalcualtion“. Тук той ще игнорира грешката, дадена от „I“, а също така, няма да изпълни изчислението „j“, но веднага ще премине към „KCalcualtion“.

# 3 - Номер на грешка при печат във VBA

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

Код:

Грешка Брой

Сега ще стартирам този код, първото съобщение ще покаже резултатите от изчислението.

Щракнете върху OK. Той ще покаже още едно поле за съобщение, за да покаже номера на грешката.

Отиваме 11; в резултат, т.е. разделяне по нула.

Също така можем да получим описанието на грешката вместо номера. Просто трябва да сменим кода. По-долу е кодът.

Код:

Грешка Описание

Ще се покаже описание като това.

Неща за запомняне

  • След като въведете “On Error Resume Next” в края на кода, не забравяйте да добавите изявлението “On Error GoTo 0.”
  • Името на етикета трябва да е еднакво и на двете места.
  • Имената на етикетите не трябва да се дефинират предварително.
  • В крайна сметка винаги вижте каква е грешката в отделното съобщение.

Интересни статии...