На этом шаге мы рассмотрим объект Err и приведем пример его использования.
Подпрограмма обработки ошибки обычно включает объект Err, который содержит информацию об ошибках выполнения. Приведем свойства и методы объекта Err.
Свойство | Назначение |
---|---|
Number | Возвращает код ошибки |
Source | Имя текущего проекта VBA |
Description | Возвращает строковое выражение, содержащее текст сообщения об ошибке |
HelpFile | Полное имя (включая диск и путь) файла справки VBA |
HelpContext | Контекстный идентификатор файла справки VBA, соответствующий ошибке с кодом, указанным в свойстве Number |
LastDLLError | Содержит системный код ошибки для последнего вызова библиотеки динамической компоновки (DLL) |
Метод | Назначение |
---|---|
Clear | Очищает все значения свойств объекта Err. Метод Clear используется для явной очистки значений свойств объекта Err после завершения обработки ошибки. Это необходимо, например, при отложенной обработке ошибки, которая задается инструкцией On Error Resume Next |
Raise | Создает ошибку выполнения. Используется при моделировании ситуаций ошибки.
Синтаксис: Raise number, source, description, helpfile, helpcontext
|
На конкретном примере покажем, как применяется объект Err при создании обработчика ошибок. На предыдущем шаге в процессе создания диалогового окна Деление и связанной с ним программы, на первый взгляд были предусмотрены все возможные ошибки. Но это только на первый взгляд. Введем, например, в поле Знаменатель значение 1е-40. Это число ничем не лучше или не хуже любого другого числа типа Single. Тем не менее, вместо вывода результата произойдет аварийное прерывание выполнения программы с отображением сообщения об ошибке переполнения. Усовершенствуем программу с учетом возможности обработки подобной ошибки. В обработчике ошибок предусмотрим два отклика:
Рис.1. Диалоговое окно с указанием типа ошибки
Private Sub CommandButton1_Click() Dim Числитель, Знаменатель, Результат As Single ' Передача управления на обработчик ошибок, ' помеченный меткой Обработка On Error GoTo Обработка ' Проверка, является ли числитель числом If IsNumeric(TextBox1.Text) = False Then MsgBox "Ошибка в числителе", _ vbInformation, "Деление" TextBox1.SetFocus Exit Sub End If ' Проверка, является ли знаменатель числом If IsNumeric(TextBox2.Text) = False Then MsgBox "Ошибка в знаменателе", _ vbInformation, "Деление" TextBox2.SetFocus Exit Sub End If ' Проверка, не является ли знаменатель нулем If CDbl(TextBox2.Text) = 0 Then MsgBox "Знаменатель не может быть нулем", _ vbInformation, "Деление" TextBox2.SetFocus Exit Sub End If Числитель = CDbl(TextBox1.Text) Знаменатель = CDbl(TextBox2.Text) Результат = Числитель / Знаменатель TextBox3.Text = CStr(Результат) ' Выход из процедуры в случае успешного нахождения результата Exit Sub ' Обработчик ошибок Обработка: Select Case Err.Number ' Обработка ошибки переполнения Case Is = 6 MsgBox " Произошла ошибка переполнения", _ vbInformation, "Деление" TextBox1.Text = 1 TextBox2.Text = 1 Знаменатель = 1 Числитель = 1 Resume ' Обработка любой другой ошибки Case Else MsgBox "Произошла ошибка: " & Err.Description & _ vbInformation, "Деление" Exit Sub End Select End Sub
В заключение отметим, что в случае, если разрабатываемое приложение состоит из нескольких процедур, причем в некоторых из них необходимо создать по обработчику ошибок, бывает более удобно для сокращения программы и для большей ясности структуры кода написать отдельную процедуру с обработчиком всех ошибок.
Со следующего шага мы начнем рассматривать отладку программ.