Обработка ошибок, инструкция On Error
End Sub
End If
Exit Sub
End If
Exit Sub
x = CDbl (Число)
If CDbl (Число) = 0 Then
MsgBox "Деление на ноль запрещено!", vbExclamation, _
"Обратное число "
y = 1/x
MsgBox "Обратное число:" & y
Попробуем теперь решить эту проблему с помощью перехвата ошибок и их обработки. Для этого предназначена инструкция On Error.
Инструкция On Error может быть записана следующим образом:
Инструкция | Описание |
On Error GoTo строка | В случае возникновении ошибки управление передается в строку с указанным номером или меткой. |
On Error Resume Next | В случае возникновении ошибки управление передается в следующую строку. При обращении к объектам лучше использовать этот синтаксис, нежели предыдущий. Инструкция Resume допустима в следующих синтаксисах: q Resume – управление передается той инструкции, в которой произошла ошибка. Пример: On Error Resume q Resume строка – управление передается в строку с указанным номером или меткой. Пример: On Error Resume m1 – управление передается в строку с меткой m1. q Resume Next – см. выше. |
On Error GoTo 0 | Отключает обработчик ошибок в текущей процедуре. |
Процедура обработки ошибок обычно включает объект Err, который содержит всю информацию о последней ошибке.
Рассмотрим два важнейших свойства объекта Err:
Свойство | Описание |
Number | Возвращает код ошибки. |
Description | Возвращает текст сообщения об ошибке |
Пример:
ОбработкаОшибок:
MsgBox "Произошла ошибка: " & Cstr(Err.Number) & “-“ & _
Err.Description, vbInformation, “Cообщение об ошибке”
Объект Err имеет свои методы:
Метод | Описание |
Clear | Очищает все значения свойств объекта Err. |
Raise | Создает ошибку выполнения. Используется при моделировании ошибок. |
Напишем программу ОбратноеЧислоError, в которой ошибки обрабатываются с помощью конструкции On Error.
1) | Sub ОбратноеЧислоError () |
2) | Dim x As Double |
3) | Dim y As Double |
4) | Dim Число As String |
5) | ‘Передача управления на обработчик ошибок, помеченный _ меткой Ошибка: |
6) | On Error GoTo Ошибка |
7) | x = CDbl(InputBox("Введите число:")) |
8) | y = 1 / x |
9) | MsgBox "Обратное число:" & y |
10) | Exit Sub |
11) | ‘Обработчик ошибок |
12) | Ошибка: |
13) | MsgBox "Произошла ошибка: " & Cstr(Err.Number) & “-“ & _ Err.Description, vbInformation, “Cообщение об ошибке” |
14) | Select Case Err.Number |
15) | Case 11 |
16) | MsgBox "Деление на ноль запрещено!", vbExclamation, _ "Обратное число " |
17) | Case 13 |
18) | MsgBox "Некорректный ввод исходного значения!", _ vbExclamation, "Обратное число" |
19) | Case Else |
20) | MsgBox "Непредвиденная ошибка!", _ vbExclamation, "Обратное число" |
21) | End Select |
22) | End Sub |
Обратите внимание на 10-ю строку кода, которая обеспечивает выход из процедуры перед активизацией обработчика ошибок. В случае её отсутствия управление передается на следующую команду, т.е. будет выведено сообщение об ошибке, даже если её и нет.
13-я строка кода приведена лишь в учебных целях, для неискушенного пользователя она не понятна!