Обработка перехваченных ошибок

Если в программе используется инструкция вида On Error GoTo Метка, то при возникновении ошибки после этой инструкции выполнение программы продолжается с метки Метка. Программный код, который начинается с данной метки и заканчивается (обычно, но не всегда и не обязательно) инструкцией Resume, называется обработчиком ошибок. В обработчике ошибок программист помещает действия, которые либо исправляют ошибку, либо информируют о ней пользователя. В конец обработчика ошибок обычно помещается один из вариантов инструкции Resume:

Resume [0]

Resume Next

Resume Метка

При использовании Resume [0] выполнение программы продолжается с той инструкции, в которой произошла ошибка. Если использовать вариант Resume Next, то выполнение программы продолжается со следующей инструкции после той, в которой произошла ошибка. Использование же варианта Resume Метка позволяет продолжить выполнение программы с указанной после Resume метки.

При обработке ошибок важно знать, что в распоряжении программиста всегда имеется глобальная ссылка с именем Err на объект ErrObject. Этот объект хранит подробную информацию о возникшей ошибке (номер ошибки, текст сообщения об ошибке и т. д.). В обработчике эту ссылку можно использовать для уточнения типа, источника ошибки, а также для получения других сведений.

Ниже приведен пример функции с обработчиком ошибок (она пытается записать текст в файл на гибком диске А:):

Function dhWriteToFloppy(strText As String) As Boolean

' Включение обработчика ошибок

On Error GoTo ErrHandler

' Выполнение операций с дискетой

Open «A:Text.txt» For Output As 1

Write #1, strText

Close 1

' Действия выполнены успешно

dhWriteToFloppy = True

ExitFunc:

' Выход из функции до обработчика ошибок

Exit Function

ErrHandler:

' Закрытие файла, если его все-таки удалось открыть

Close 1

Dim strErrMessage As String

' Идентификация ошибки и формирование текста сообщения

Select Case Err.Number

Case 71

strErrMessage = «Нет диска в дисководе»

Case 70

strErrMessage = «Диск защищен от записи»

Case 61

strErrMessage = «Нет места на диске»

Case Else

strErrMessage = Err.Description

End Select

' Отображение сообщения об ошибке

MsgBox strErrMessage, vbExclamation, «Ошибка»

' Продолжение выполнения программы

dhWriteToFloppy = False

Resume ExitFunc

End Function

Если запись удается, то функция возвращает значение True. Если возникает ошибка, то выдается соответствующее сообщение, после чего функция возвращает значение False. На примере функции dhWriteToFloppy следует заметить, что при нормальном выполнении программы (без возникновения ошибок) обработчик ошибок выполняться не должен, что достигается выходом из функции до обработчика с помощью инструкции Exit Function.