如何在vba中应用错误处理程序?

编写vba代码,不可避免的会遇到运行错误,有些运行错误是可以通过调整代码来消除的,有些运行错误是需要忽略的。

为了让程序运行顺畅,有时候需要应用错误处理程序使程序在遇到运行错误时选择处理的方式。

接下来介绍几种错误处理方式

一、使用On Error Resume Next 语句 遇到运行错误时直接忽略,继续运行。

比如,当运行以下代码时

Sub QQ1722187970()
    For i = 0 To 100
        Debug.Print 1 / i
    Next i
End Sub

会报“除数为零”的运行错误。

当添加On Error Resume Next 语句时,将直接忽略运行错误,不间断地运行代码。

Sub QQ1722187970()
    On Error Resume Next
    For i = 0 To 100
        Debug.Print 1 / i
    Next i
End Sub

二、 使用On Error GoTo line 语句 遇到运行错误时跳转到line标签所在行。

Sub QQ1722187970()
    On Error GoTo bty
    For i = 0 To 100
        Debug.Print 1 / i
    Next i
bty:
    Debug.Print "有0出现"
End Sub

为了避免没有出现运行错误时,也会执行错误处理程序,一般要在错误处理程序之前添加Exit Sub、Exit Function 或 Exit Property语句用以退出正常的运行程序。如以下代码所示

Sub QQ1722187970()
    On Error GoTo bty
    For i = 1 To 10
        Debug.Print 1 / i
    Next i
    Exit Sub
bty:
    Debug.Print "有0出现"
End Sub

同时为了避免错误处理程序只执行一次就中断,需要在错误处理程序内部添加Resume Next语句继续尚未执行完成的语句。如以下代码所示

Sub QQ1722187970()
    On Error GoTo bty
    For i = -2 To 2
        Debug.Print 1 / (Abs(i) - 2)
    Next i
    Exit Sub
bty:
    Debug.Print "有0出现"
    Resume Next
End Sub

三、使用On Error GoTo 0语句结束错误处理程序。

如以下代码将在遇到第一个除数为0以后结束错误处理程序,下一个除数为0还是会报错。

Sub QQ1722187970()
    On Error GoTo bty
    For i = -2 To 2
        Debug.Print 1 / (Abs(i) - 2)
    Next i
    Exit Sub
bty:
    Debug.Print "有0出现"
    On Error GoTo 0
    Resume Next
End Sub

 

 

 

       

发表评论