Обработка ошибок в 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 8 9 10 |
Sub Primer() On Error GoTo Stroka 'Блок операторов процедуры Exit Sub Stroka: If Err.Description <> "" Then MsgBox "Произошла ошибка: " _ & Err.Description End If End Sub |
Оператор On Error GoTo
размещается в начале процедуры, метка и обработчик ошибок – в конце процедуры. Название метки можно сменить на другое, в том числе на кириллице. Exit Sub
обеспечивает выход из процедуры, если блок операторов выполнен без ошибок.
Для вывода описания ошибки используется свойство Description объекта Err.
Примеры обработки ошибок
Пример 1
Деление на ноль:
1 2 3 4 5 6 7 8 9 10 11 |
Sub Primer1() On Error GoTo Инструкция Dim a As Double a = 45 / 0 Exit Sub Инструкция: If Err.Description <> "" Then MsgBox "Произошла ошибка: " _ & Err.Description End If End Sub |
Результат выполнения кода VBA Excel с обработчиком ошибок:
Пример 2
Выход за границы диапазона:
1 2 3 4 5 6 7 8 9 10 11 |
Sub Primer2() On Error GoTo Instr Dim myRange As Range Set myRange = Range("A1:D4").Offset(-2) Exit Sub Instr: If Err.Description <> "" Then MsgBox "Произошла ошибка: " _ & Err.Description End If End Sub |
Результат выполнения кода VBA Excel с оператором On Error GoTo
:
Пример использования выражений On Error Resume Next
и On Error GoTo 0
смотрите в статье: Отбор уникальных значений с помощью Collection.