Обработка ошибок в VBA Excel с помощью оператора On Error. Синтаксис выражений с оператором On Error. Пример кода с простым обработчиком ошибок.
Описание оператора On Error
В первую очередь, обработчик ошибок нужен для пользователей файлов Excel с кодами VBA. Любая ошибка приводит к прекращению выполнения программы, открытию редактора VBA с непонятным для пользователя сообщением или даже к полному зависанию приложения.
Обработчик ошибок позволяет завершить выполнение программы при возникновении ошибки и вывести сообщение пользователю с ее описанием.
Синтаксис выражений с On Error
1 |
On Error GoTo Stroka |
Включает алгоритм обнаружения ошибок и, в случае возникновения ошибки, передает управление операторам обработчика ошибок с указанной в выражении строки. Stroka – это метка, после которой расположены операторы обработчика ошибок.
1 |
On Error Resume Next |
Включает алгоритм обнаружения ошибок и, в случае возникновения ошибки, передает управление оператору, следующему за оператором, вызвавшем ошибку.
1 |
On Error GoTo 0 |
Отключает любой включенный обработчик ошибок в текущей процедуре.
Простой обработчик ошибок
Шаблон простейшего обработчика ошибок:
1 2 3 4 5 6 7 |
Sub Primer() On Error GoTo Stroka 'Блок операторов процедуры Exit Sub Stroka: MsgBox "Произошла ошибка: " & Err.Description End Sub |
Оператор On Error GoTo
размещается в начале процедуры, метка и обработчик ошибок – в конце процедуры. Название метки можно сменить на другое, в том числе на кириллице.
Оператор Exit Sub
обеспечивает выход из процедуры, если блок операторов выполнен без ошибок. Для вывода описания ошибки используется свойство Description
объекта Err
.
Примеры обработки ошибок
Пример 1
Деление на ноль:
1 2 3 4 5 6 7 8 |
Sub Primer1() On Error GoTo Instruk Dim a As Double a = 45 / 0 Exit Sub Instruk: MsgBox "Произошла ошибка: " & Err.Description End Sub |
Результат выполнения кода VBA Excel с обработчиком ошибок:
Пример 2
Выход за границы диапазона:
1 2 3 4 5 6 7 8 |
Sub Primer2() On Error GoTo Instruk Dim myRange As Range Set myRange = Range("A1:D4").Offset(-2) Exit Sub Instruk: MsgBox "Произошла ошибка: " & Err.Description End Sub |
Результат выполнения кода VBA Excel с оператором On Error GoTo
:
Пример использования выражений On Error Resume Next
и On Error GoTo 0
смотрите в статье: Отбор уникальных значений с помощью Collection.
Здравствуйте, а как передать ошибку в родительскую процедуру? То есть у меня есть Sub 1 который вызывает Sub 2 и Sub 3. в Sub 2 происходит ошибка, я ее обрабатываю и выполняю exit sub. Но потом у меня выходит в Sub 1 и вызывается Sub 3, а мне нужно после возникновения ошибки завершить sub 1. Спасибо.
Здравствуйте, Филипп!
Объявите в разделе Declarations глобальную переменную, например,
Dim myBool As Boolean
. В обработчике ошибок процедуры Sub2 присваивайте переменной myBool значение True. В процедуру Sub1 добавьте условие, при выполнении которого будет происходить выход из процедуры:Класс. Попробую. Спасибо!
Здравствуйте, на некоторых ресурсах вижу примерно такой код:
If not Err<>0 then...
Вопрос: Почему не написать
If Err=0 then...
Что, есть какая-то разница?Обсуждение закрыто.