Обработка ошибок 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