eXcellence-team eXcellence

Обработка ошибок VBA

Для обработки ошибок в VBA и VB есть специальный оператор On Error. Он задает, куда будет передано управление в случае ошибки. Приведу пример:

Sub ErrorHandling()
  On Error GoTo ErrorHandler
   Dim a As Integer
   Dim x As Integer
   Dim y As Double
   a = 20
   x = 0
   y = a / x
   MsgBox ("Это сообщение никогда не появится")
   GoTo Ends:
ErrorHandler:
  MsgBox ("Ошибка деления на ноль")
Ends:
End Sub

В этом примере при возникновении ошибки управление передается к метке ErrorHandler и выводится сообщение об ошибке. Если нужно вернуться из обработчика ошибки назад, в точку, где выполнение было прервано, используется оператор Resume Next:

Sub ErrTest()
  On Error GoTo ErrorHandler
  Dim a As Integer
  Dim x As Integer
  Dim y As Double
  a = 20
  x = 0
  y = a / x
  MsgBox ("Процедура выполненяется дальше")
  GoTo Ends:
ErrorHandler:
  MsgBox ("Ощибка деления на ноль !")
  Resume Next
Ends:
End Sub

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

Sub ManyBugs()
  On Error Resume Next
  Dim a As Integer
  Dim x As Integer
  Dim y As Double
  a = 30
  x = 0
  y = a / x
  a = 20
  x = 5
  y = 8 / 6
  MsgBox ("Никто ничего не заметил ;)")
End Sub