MS VBA | On Error Goto Err |
Чтобы ошибка не вываливалась в Debug
При возникновении ошибки кода, сработает переход к Err:, в котором можно указать выдачу сообщения с описанием ошибки и выход из процедуры.
Например:
Private Sub StopApp_Click() On Error GoTo Err '…код процедуры
'если имеет место быть On Error Goto… в коде, то всегда необходим выход из процедуры – Exit Sub, через который процедура пройдет при 'условии безошибочного завершения программы (иначе командная срока перейдет к Err: независимо, 'от того возникла ошибка или нет) Exit Sub
'командная строка перейдет к Err в случае если возникла ошибка Err: Msgbox Err.Description 'или Msgbox Error$ Exit Sub End Sub
➢Пример: простой обработчик:
Sub errors() Dim orderdate As Date On Error GoTo err orderdate = InputBox("Введите дату заказа") MsgBox "Ваш заказ будет готов" & orderdate + 10 Exit Sub err: MsgBox "Вы ввели не дату" End Sub
➢Пример: обработчик с обращением к пользователю:
Sub errors_backToInitial() Dim orderdate As Date, button As Integer On Error GoTo err orderdate = InputBox("Введите дату заказа") MsgBox "Ваш заказ будет готов" & orderdate + 10 Exit Sub err: button = MsgBox("Вы ввели не дату. Повторить попытку?", vbYesNo) If button = vbYes Then Resume ' вернуться к строке на которой произошла ошибка End If End Sub
➢Пример обработки ошибки "по ходу дела" (в теле процедуры). Анализ возможной ошибки Sub Error_analysis() Dim orderdate As Date, button As Integer On Error Resume Next lbl: orderdate = InputBox("Введите дату заказа") 'анализ возможной ошибки If err <> 0 Then button = MsgBox("Вы ввели не дату", vbYesNo) If button = vbYes Then err.Clear GoTo lbl Else Exit Sub End If End If MsgBox "Ваш заказ будет готов" & orderdate + 10 End Sub
См. также: Err.Raise
|