VBA异常处理
异常处理综述
在vba代码中并没有 try catch异常处理语句,但有 on error 语句和try catch语句的功能类似;
其形式如:on error +处理方式
异常处理方法分类
语法 | 功能 |
---|---|
on error GoTo 0 | 默认报错 ,和不使用该语句报错情况相同 |
on error Resume Next | 出现异常后忽略异常,继续执行下一条语句 |
on error goto [标志语句] | 出现异常后,跳转到标志语句位置运行出错后处理的语句 |
resume [标志语句] | 运行完出错后处理的语句 |
exit sub | 异常监测结束,选择性退出过程执行 |
异常处理方法使用
On error GoTo 0
默认的异常处理方法,该异常处理语句和不使用该语句的报错情况相同,如下图对比:
1、无异常处理的默认情况下:
2、加入异常处理语句
on error Resume Next
出现异常后会忽略异常,继续执行下一条语句
on error goto [标志语句]
当该语句控制的区域类代码出现异常错误时,不会将错误如On Error GoTo 0一样显示出来,而是继续执行标志语句后面的代码,具体使用如下:
而且可以在标志语句后面添加报错的具体信息:
具体报错信息代码参考:
Sub test1()
On Error GoTo ErrorHandle
Dim num1, num2
num1 = 12
num2 = num1 / 0
ErrorHandle:
MsgBox "错误代码: " & Err.Number & vbCrLf & _
"错误描述: " & Err.Description & vbCrLf & _
"错误来源: " & Err.Source, vbCritical
End Sub
on error goto [标志语句]/Exit sub
Exit sub表示选择性的退出过程执行,即不在执行Exit sub后面的代码
一般和on error goto [标志语句]搭配使用,即将Exit sub 放至标志语句之前,含义是当代码出现异常时,执行标志语句后面的代码,当未出现代码异常,则不需要执行标志语句后面的代码,,(exit sub & end sub的区别参考该链接)具体使用如下:
①、出现异常错误:
②、未出现异常错误
on error goto [标志语句]/resume [标志语句]
在执行完异常处理后,若需要继续返回到源代码中继续执行异常语句下面的代码时,采用resume[标志语句],具体使用如下:
Sub test1()
On Error GoTo ErrorHandle
Dim num1, num2
num1 = 12
num2 = num1 / 0
MsgBox num2
Continue:
num1 = num1 / 2
MsgBox num1
Exit Sub
ErrorHandle:
MsgBox "错误代码: " & Err.Number & vbCrLf & _
"错误描述: " & Err.Description & vbCrLf & _
"错误来源: " & Err.Source, vbCritical
num2 = 0
Resume Continue
End Sub
执行后会先出现一个错误信息弹框
点击确定后,弹出第二个弹框
代码执行完毕。
多个异常处理语句的使用
在一个代码中可以设置多个异常处理的语句,在两个控制语句之间的代码的监测权在上面异常处理语句,具体如下:
Sub test2()
On Error GoTo ErrorHandle
k = 1 / 0
ExitProcedure:
On Error Resume Next
k = 1 / 0 + 1
k = 99
MsgBox k
Exit Sub
ErrorHandle:
MsgBox "错误代码: " & Err.Number & vbCrLf & _
"错误描述: " & Err.Description & vbCrLf & _
"错误来源: " & Err.Source, vbCritical
Resume ExitProcedure
End Sub
执行后先显示一个错误信息
点击确定,会执行ExitProcedure:后面的代码:
参考文章链接
1、https://zhuanlan.zhihu.com/p/137608517.
2、https://zhuanlan.zhihu.com/p/145645889
3、https://blog.csdn.net/lrtcsdn/article/details/78936158