Манипулаторите на грешки ви позволяват да укажете какво се случва, когато се срещне грешка, докато вашият макрокод на Excel се изпълнява. Манипулаторите на грешки са редове, подобни на следните:
При грешка Отидете до MyError
Без манипулатори на грешки всяка грешка, която се появява във вашия код, ще подкани Excel да активира не толкова полезно съобщение за грешка, което обикновено няма да предаде ясно какво се е случило. Въпреки това, с помощта на манипулатори на грешки, можете да изберете да игнорирате грешката или да излезете грациозно от кода със собствено съобщение до потребителя.
Има три типа изявления за грешка:
-
При грешка GoTo SomeLabel: Кодът прескача към посочения етикет.
-
При грешка Възобновяване Напред: Грешката се игнорира и кодът се възобновява.
-
При грешка GoTo 0: VBA се връща към нормалното поведение при проверка на грешки.
При грешка GoTo SomeLabel
Понякога грешка във вашия код означава, че трябва грациозно да излезете от процедурата и да дадете на потребителите си ясно съобщение. В тези ситуации можете да използвате оператора On Error GoTo, за да кажете на Excel да премине към определен ред код.
Например, в следната малка част от кода казвате на Excel да раздели стойността в клетка A1 на стойността в клетка A2 и след това да постави отговора в клетка A3. Лесно. Какво може да се обърка?
Подмакрос1()
Диапазон("A3").Стойност = Диапазон("A1").Стойност / Диапазон("A2").Стойност
Край под
Както се оказва, две основни неща могат да се объркат. Ако клетка A2 съдържа 0, получавате грешка при деление на 0. Ако клетка A2 съдържа нечислова стойност, получавате грешка за несъответствие на типа.
За да избегнете неприятно съобщение за грешка, можете да кажете на Excel, че при грешка искате изпълнението на кода да премине към етикета, наречен MyExit.
В следващия код етикетът MyExit е последван от съобщение до потребителя, което дава приятелски съвет вместо неприятно съобщение за грешка. Също така имайте предвид подреда Exit Sub преди етикета MyExit, който гарантира, че кодът просто ще излезе, ако не се открие грешка:
Подмакрос1()
При грешка GoTo MyExit
Диапазон("A3").Стойност = Диапазон("A1").Стойност / Диапазон("A2").Стойност
Изход Sub
MyExit:
MsgBox "Моля, използвайте валидни ненулеви числа"
Край под
При грешка Продължете напред
Понякога искате Excel да игнорира грешка и просто да възобнови изпълнението на кода. В тези ситуации можете да използвате оператора On Error Resume Next.
Например, следната част от кода е предназначена да изтрие файл, наречен GhostFile.exe от директорията C:Temp. След като файлът бъде изтрит, хубаво поле за съобщение казва на потребителя, че файлът е изчезнал:
Подмакрос1()
Убийте "C:TempGhostFile.exe"
MsgBox "Файлът е изтрит."
Край под
Кодът работи чудесно, ако наистина има файл за изтриване. Но ако по някаква причина файлът, наречен GhostFile.exe, не съществува в устройството C: Temp, се извежда грешка.
В този случай не ви пука дали файлът не е там, защото така или иначе щяхте да го изтриете. Така че можете просто да игнорирате грешката и да продължите с кода.
С помощта на оператора On Error Resume Next, кодът се изпълнява независимо дали целевият файл съществува или не:
Подмакрос1()
При грешка Продължете напред
Убийте "C:TempGhostFile.exe"
MsgBox "Файлът е изтрит."
Край под
При грешка Отидете до 0
Когато използвате определени изрази за грешки, може да се наложи да нулирате поведението на VBA за проверка на грешки. За да разберете какво означава това, разгледайте следващия пример.
Тук първо искате да изтриете файл, наречен GhostFile.exe от директорията C:Temp. За да избегнете грешки, които могат да произтичат от факта, че целевият файл не съществува, използвате оператора On Error Resume Next. След това се опитвате да направите някаква подозрителна математика, като разделите 100/Майк:
Подмакрос1()
При грешка Продължете напред
Убийте "C:TempGhostFile.exe"
Диапазон("A3").Стойност = 100 / "Майк"
Край под
Изпълнението на тази част от кода би трябвало да генерира грешка поради размитата математика, но не. Защо? Защото последната инструкция, която дадохте на кода, беше On Error Resume Next. Всяка грешка, възникнала след този ред, ефективно се игнорира.
За да отстраните този проблем, можете да използвате израза On Error GoTo 0, за да възобновите нормалното поведение при проверка на грешки:
Подмакрос1()
При грешка Продължете напред
Убийте "C:TempGhostFile.exe"
При грешка Отидете до 0
Диапазон("A3").Стойност = 100 / "Майк"
Край под
Този код ще игнорира грешки до изявлението On Error GoTo 0. След това изявление кодът се връща към нормална проверка на грешки и задейства очакваната грешка, произтичаща от размитата математика.