Всички VBA грешки не са създадени равни. Някои са сериозни, а други са по-малко сериозни. Въпреки че може да игнорирате грешки, които смятате за несъществени, трябва да се справите с други, по-сериозни грешки. В някои случаи трябва да идентифицирате конкретната грешка, която възниква.
Всеки вид грешка има официален номер. Когато възникне грешка, Excel съхранява номера на грешката в обект Error с име Err. Свойството Number на този обект съдържа номера на грешката, а свойството Description съдържа описание на грешката. Например следното изявление показва номера на грешката, двоеточие и описание на грешката:
MsgBox Err.Number & ": " & Err.Description
Имайте предвид, че съобщенията за грешки в Excel не винаги са много полезни - но вече знаете това.
Следващата процедура показва как да определите коя грешка е възникнала. В този случай можете спокойно да игнорирате грешки, причинени от опит за получаване на корен квадратен от неположително число (тоест грешка 5) или грешки, причинени от опит за получаване на корен квадратен от нечислова стойност (грешка 13).
От друга страна, трябва да информирате потребителя дали работният лист е защитен и селекцията съдържа една или повече заключени клетки. (В противен случай потребителят може да си помисли, че макросът работи, когато наистина не е работил.) Опитът за запис в заключена клетка в защитен работен лист причинява грешка 1004.
ПодселекцияSqrt()
Затъмнена клетка като диапазон
Dim ErrMsg като низ
Ако TypeName(Selection) <> "Range" След това излезте от Sub
При грешка Отидете до ErrorHandler
За всяка клетка в селекция
клетка.стойност = Sqr(клетка.стойност)
Следваща клетка
Изход Sub
ErrorHandler:
Изберете Case Err.Number
Случай 5 „Отрицателно число
Възобновяване Следващ
Случай 13 „Несъответствие на типа
Възобновяване Следващ
Случай 1004 „Заключена клетка, защитен лист
MsgBox "Клетката е заключена. Опитайте отново.", vbCritical, cell.Address
Изход Sub
Друг случай
ErrMsg = Грешка (Номер на грешка)
MsgBox "ГРЕШКА: " & ErrMsg, vbCritical, cell.Address
Изход Sub
Край Изберете
Край под
Когато възникне грешка по време на изпълнение, изпълнението прескача към кода, започващ от етикета ErrorHandler. Структурата Select Case тества три често срещани номера на грешки. Ако номерът на грешката е 5 или 13, изпълнението се възобновява при следващия оператор. (С други думи, грешката се игнорира.) Но ако номерът на грешката е 1004, рутината информира потребителя и след това приключва. Последният случай, общ за неочаквани грешки, улавя всички други грешки и показва действителното съобщение за грешка.