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

 

 



© 2018 | Анна Петросян | pashelp@yandex.ru