Усі помилки VBA не створюються однаковими. Хтось серйозний, а хтось менш серйозний. Хоча ви можете ігнорувати помилки, які вважаєте несуттєвими, ви повинні мати справу з іншими, більш серйозними помилками. У деяких випадках потрібно визначити конкретну помилку, яка виникає.
Кожен тип помилки має офіційний номер. Коли виникає помилка, Excel зберігає номер помилки в об’єкті Error з ім’ям Err. Властивість Number цього об’єкта містить номер помилки, а його властивість Description містить опис помилки. Наприклад, наступний оператор відображає номер помилки, двокрапку та опис помилки:
MsgBox Err.Number & ": " & Err.Description
Майте на увазі, що повідомлення про помилки Excel не завжди дуже корисні, але ви це вже знаєте.
Наступна процедура демонструє, як визначити, яка помилка сталася. У цьому випадку ви можете безпечно ігнорувати помилки, спричинені спробою отримати квадратний корінь з непозитивного числа (тобто помилка 5) або помилки, спричинені спробою отримати квадратний корінь з нечислового значення (помилка 13).
З іншого боку, вам потрібно повідомити користувача, чи аркуш захищений, а виділення містить одну або кілька заблокованих клітинок. (Інакше користувач може подумати, що макрос спрацював, але насправді це не так.) Спроба запису в заблоковану комірку на захищеному аркуші викликає помилку 1004.
Sub SelectionSqrt()
Яскрава комірка як діапазон
Dim ErrMsg як рядок
Якщо TypeName(Selection) <> "Діапазон", Вийдіть із Sub
У разі помилки GoTo ErrorHandler
Для кожної клітинки у виділенні
cell.Value = Sqr(cell.Value)
Наступна клітинка
Вийти з суб
ErrorHandler:
Виберіть Номер помилки випадку
Випадок 5 «Від’ємне число
Резюме Далі
Випадок 13 «Невідповідність типів
Резюме Далі
Справа 1004 'Заблокована камера, захищений аркуш
MsgBox "Осередок заблоковано. Спробуйте ще раз.", vbCritical, cell.Address
Вийти з суб
Інший випадок
ErrMsg = Помилка (Номер помилки)
MsgBox "ПОМИЛКА: " & ErrMsg, vbCritical, cell.Address
Вийти з суб
Вибір кінця
Кінець суб
Коли виникає помилка під час виконання, виконання переходить до коду, що починається з мітки ErrorHandler. Структура Select Case перевіряє три поширені номери помилок. Якщо номер помилки дорівнює 5 або 13, виконання відновлюється з наступного оператора. (Іншими словами, помилка ігнорується.) Але якщо номер помилки дорівнює 1004, програма повідомляє користувача, а потім завершується. Останній випадок, загальний засіб для непередбачених помилок, перехоплює всі інші помилки та відображає фактичне повідомлення про помилку.