Обработка ошибок, инструкция 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-я строка кода приведена лишь в учебных целях, для неискушенного пользователя она не понятна!






