Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Макросы.doc
Скачиваний:
26
Добавлен:
21.11.2018
Размер:
16.91 Mб
Скачать

Понятие об обработке ошибок

Разрешение непредвиденных ситуаций при выполнении приложений называется обработкой ошибок. Процедуры, выполняющие обработку ошибок, называются, как нетрудно догадаться, обработчиками ошибок (error handler). Их назначение - отлов (перехват) в приложении ошибок и борьба с ними. В создании обработчика ошибок можно выделить три этапа.

  1. Установка ловушек для ошибок (error trap).

Установка ловушек для ошибок означает вставку операторов перехвата ошибок, так что приложение знает, куда обратиться (какую процедуру вызвать), если эта самая ошибка случится.

  1. Написание процедуры обработки ошибок.

Создание кода, который определяет тип ошибки и выполняет те или иные действия для разрешения проблем, вызванных ошибкой.

  1. Создание выхода из процедуры обработки ошибок.

Другими слова, приложение должно знать, что делать после обработки ошибки.

Перехват ошибок

Установка ловушек для ошибок в VBA осуществляется с помощью оператора On Error. В процедуре может быть только одна ловушка для ошибок. Но это не означает, что в процедуре возможен только один оператор On Error. Если в процедуре несколько операторов On Error, то на самом деле все равно должен выполняться только один из них.

Есть два различных способа обработки ошибок. В первом способе инструкция, указывающая, что делать при возникновении ошибки, является частью оператора On Error. В VBA предусмотрены два таких оператора.

  • On Error Resume

В случае ошибки управление снова передается оператору, при выполнении которого возникла ошибка.

  • On Error Resume Next

В случае ошибки управление передается оператору, следующему за тем оператором, при выполнении которого возникла ошибка.

Для блокировки обработчика ошибок применяется оператор On Error GoTo 0, который располагается после оператора On Error. Блокировка обработчика ошибок полезна при тестировании приложения, когда вы для чистоты эксперимента не хотите задействовать процедуру обработки ошибок.

Первый способ обработки ошибок не является рекомендуемым или предпочтительным, так как ошибки здесь не обрабатываются, а просто игнорируются. Второй способ обработки ошибок использует оператор On Error для перехода к процедуре, где действительно происходит обработка ошибки. Это дает значительную гибкость в реагировании на различные типы ошибок.

Во втором способе используется оператор On Error GoTo строка, где строка - это метка (line label) в строке кода процедуры, начиная с которой располагается код обработчика ошибок. Метка представляет собой имя, заканчивающееся двоеточием, что отличает ее от других идентификаторов языка VBA. Листинг 13.1 показывает структуру процедуры, содержащую обработчик ошибок.

Листинг 13.1. Структура процедуры, содержащая обработчик ошибок

1: Sub ПроцедураСОбработчиком()

2:  On Error GoTo ErrorHandler

3:  'Далее идет тело процедуры

4:  .

5:  .

6:  .'Следующий оператор, Exit Sub или Exit Function

7:  .'(в зависимости от типа процедуры), стоит перед

8:  'меткой, с которой начинается код обработчика

9:  'ошибок. Это сделано для того, чтобы при отсутствии

10:  'ошибок обработчик не выполнялся.

11:  Exit Sub

12: 'В следующей строке расположена метка обработчика ошибок

13: ErrorHandler:

14:  'Далее идет код процедуры обработки ошибок

15:  .

16:  .

17: End Sub