因为总会有许多意想不到的错误发生,如激活一个不存在的工作表,删除一个已经打开的文件,所以无论多么认真和仔细,都不能避免程序在运行时发生错误。
但有些错误是可以预先知道的,所以可以在程序中加入一些错误处理的代码,保证程序正常运行。
VBA通过On Error语句捕获运行时错误,该语句告诉VBA,如果运行程序时出现错误应该怎么做。
On Error语句有3种形式。
7.4.1 Go Error GoTo标签
Go Error GoTo该语句告诉VBA,当发生错误时,继续执行标签所在行及之后的代码。
没有出现错误的提示对话框,如图7-21所示。
图7-21 使用On Error捕获错误
关于标签的设置,请参阅3.7.7小节中对GoTo语句的介绍。
7.4.2 On Error Resume Next
该语句告诉VBA:如果程序发生错误,继续执行错误行后面的代码。
如果在程序中加入On Error Resume Next语句,运行程序时,即使程序中存在运行时错误,也不会中断程序,显示错误信息,并且会继续执行错误语句之后的代码。
运行这个程序后,无论当前活动工作簿中是否存在abc工作表,都不会出现错误信息,也不会出现最后Msgbox函数的对话框。
发现了吗?
在程序中,总是把“On Error GoTo标签”或“On Error Resume Next”放在可能出错的代码之前,这是因为只有On Error语句之后出现的运行时错误才能被捕捉到,所以通常把捕捉错误的语句放在程序开始处。
7.4.3 On Error GoTo 0
使用On Error GoTo 0语句后,将关闭对程序中运行时错误的捕捉。如果在On Error GoTo 0语句后,代码再出现运行时错误,尽管在程序一开始已经写入“On Error GoTo标签”或“On Error Resume Next”,运行时错误都不会被捕捉到,如图7-22所示。
图7-22 关闭错误捕捉