Самоучитель VBA


         

Тем не менее, вместо вывода


Тем не менее, вместо вывода результата произойдет аварийное прерывание выполнения программы с отображением сообщения об ошибке переполнения. Усовершенствуем программу с учетом возможности обработки подобной ошибки. В обработчике ошибок предусмотрим два отклика:

  • Пользователь информируется программой в случае появления ошибки переполнения, знаменателю и числителю присваиваются 1 и с этими данными проводятся вычисления.

  • При появлении ошибки, отличной от ошибки переполнения, выполнение программы прерывается с информированием пользователя об ошибке (рис. 12.4).



    Рис. 12.4. Диалоговое окно с указанием типа ошибки

    Private Sub CommandButtonl_Click()

    Dim Числитель, Знаменатель, Результат As Single

    '

    ' Передача управления на обработчик ошибок,

    ' помеченный меткой Обработка

    '

    On Error GoTo Обработка

    '

    ' Проверка, является ли числитель числом

    '

    If IsNumeric(TextBoxl.Text) = False Then MsgBox "Ошибка в числителе",

    vblnformation, "Деление" TextBoxl.SetFocus

    Exit Sub

    End If

    ' Проверка, является ли знаменатель числом

    '

    If IsNumeric(TextBox2.Text) = False Then

    MsgBox "Ошибка в знаменателе",

    vblnformation, "Деление"

    TextBox2.SetFocus

    Exit Sub

    End If

    '

    ' Проверка, не является ли знаменатель нулем

    '

    If CDbl(TextBox2.Text) = 0 Then

    MsgBox "Знаменатель не может быть нулем", vblnformation, "Деление"

    TextBox2.SetFocus

    Exit Sub

    End If

    '

    Числитель = CDbl(TextBoxl.Text)

    Знаменатель = CDbl(TextBox2.Text)

    Результат = Числитель / Знаменатель

    TextBox3 . Text = CStr (.Результат)

    '

    ' Выход из процедуры в случае успешного нахождения результата

    '

    Exit Sub

    '

    ' Обработчик ошибок

    '

    Обработка: Select Case Err.Number

    '

    ' Обработка ошибки переполнения

    '

    Case Is = 6

    MsgBox " Произошла ошибка переполнения",

    vblnformation, "Деление"

    TextBoxl.Text = 1

    TextBox2.Text = 1

    Знаменатель = 1

    Числитель = 1 Resume

    ' Обработка любой другой ошибки

    '

    Case Else

    MsgBox "Произошла ошибка: " & Err.Description &

    vblnformation, "Деление"

    Exit Sub

    End Select

    End Sub

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




    Содержание  Назад  Вперед