简谈VBA的错误处理

MVP

宋翔,微软全球最有价值专家(MVP),从事多年网络技术服务以及企业信息化管理工作,对Microsoft Office在销售、人力、财务等多方面的应用有比较丰富的经验。主要致力于微软Windows和Office两大系列产品的深入研究与开发,出版过多部Windows和Office方面的书籍。好读书,求甚解,对任何事物喜欢钻研和琢磨。为人谦虚随和,乐于助人,网名“完美”,是多个Windows和Office论坛的版主,并建有自己的个人网站,与读者以及广大电脑爱好者在线交流电脑技术。业余爱好广泛,尤其喜欢不同风格的音乐,擅长唱歌,以欧美流行歌曲为主。

( 3 )在宏的末尾(正常程序的末尾)添加代码行 Exit Sub ,这样可以避免程序未发生错误时执行错误处理程序。

注意:可以在过程的末尾添加多个错误处理程序,但必须确保每个错误处理程序都以 Resume Next 或 Exit Sub 语句结束,这样可以避免从当前错误程序之后继续执行其后的错误处理程序。

举一个简单的例子可能会更直观地反映出上面所说的内容。在下面的代码中,当检测到工作簿中没有指定的工作表时,将出现错误,并执行错误代码,显示一个包含错误号与错误描述的对话框。

Sub 检测工作表是否存在 ()

Dim wksname As String, msg As String

On Error GoTo MyErr

wksName = Worksheets("sx").Name

MyErr:

msg = " 错误 " & Err.Number & " : " & Err.Description

MsgBox msg

End Sub

Sub ErrTest()

Dim x As Integer, y As Integer, z As Single

x = 1

y = 0

On Error GoTo MyErr

MsgBox x / y

MsgBox x / y

MsgBox " 继续执行错误代码行的下一行代码 "

Exit Sub

MyErr:

MsgBox " 第 1 次:除数不能为 0"

Resume Next

End Sub

Sub ErrTest()

Dim x As Integer, y As Integer, z As Single

x = 1

y = 0

On Error GoTo MyErr

MsgBox x / y

On Error GoTo 0

MsgBox x / y

MsgBox " 继续执行错误代码行的下一行代码 "

Exit Sub

MyErr:

MsgBox " 第 1 次:除数不能为 0"

Resume Next

End Sub

Sub ErrTest()

Dim x As Integer, y As Integer, z As Single

x = 1

y = 0

On Error GoTo MyErr1

MsgBox x / y

On Error GoTo MyErr2

MsgBox x / y

MsgBox " 继续执行错误代码行的下一行代码 "

Exit Sub

MyErr1:

MsgBox " 第 1 次:除数不能为 0"

Resume Next

MyErr2:

MsgBox " 第 2 次:除数不能为 0"

Resume Next

End Sub

以上 3 段代码在执行完错误处理程序后,都会返回发生错误的代码之后继续执行。对于本例来说,在执行完错误处理程序后,都会继续执行“ MsgBox " 继续执行错误代码行的下一行代码 " ”代码行。

虽然我们不希望在程序运行时出现错误,但是有些时候我们可以利用错误来提高代码的效率。例如,当用户由于某些原因将工作簿中的某个工作表删除,如果 VBA 程序中中包括操作该工作表的代码,那么当用户运行该程序时,将导致错误发生。此时,可以利用错误来检测要操作的工作表是否存在于工作簿中。代码如下:

Sub 检测工作表是否存在 ()

Dim WksName As String

On Error Resume Next

WksName = Worksheets("sx").Name

If Err.Number <> 0 Then

MsgBox prompt:=" 此工作簿中未找到工作表 sx", Title:=" 错误 "

End If

On Error GoTo 0

End Sub

与那些新人和旧人们共同经历吧!

简谈VBA的错误处理

相关文章:

你感兴趣的文章:

标签云: