单击按钮后,我正在运行一行代码来打开PDF。如果文件不存在,我会在上面放一个错误处理程序。问题是代码可以正常工作并且文件已打开,但错误处理程序仍然运行。
当我禁用错误处理代码时,它可以正常运行,并且VB不会生成错误。我什至尝试使用Err.Description
作为消息框,它只是弹出而没有显示任何内容。这是我的代码:
Private Sub cmdOpenPDF_Click()
On Error GoTo Errorhandler
Application.FollowHyperlink "E:\groups\folder\folder2\" & Dir("E:\groups\folder\folder2\*" & Me.txtInvNum & "*")
Errorhandler:
MsgBox "Unable to locate the file. I'm sorry this has happened.", vbOKOnly
Exit Sub
End Sub
由于PDF可以正常打开,所以我希望不会有任何错误。令人费解的是,如果没有错误处理程序,则在运行时没有错误。有人知道它为什么这样做吗?
答案 0 :(得分:2)
在您的代码中,Errorhandler
仅仅是line label,其中的On Error
语句在发生错误时将评估重定向到该标签。
因此,请考虑VBA不会区分用于错误处理程序的行标签,与任何其他GoTo
语句结合使用的任何其他行标签,或未与其他Private Sub cmdOpenPDF_Click()
Application.FollowHyperlink "E:\groups\folder\folder2\" & Dir("E:\groups\folder\folder2\*" & Me.txtInvNum & "*")
Errorhandler:
MsgBox "Unable to locate the file. I'm sorry this has happened.", vbOKOnly
Exit Sub
End Sub
语句一起使用的行标签。完全引用。
在没有错误的情况下,您的代码等效于:
FollowHyperlink
在这里,VBA将尽职地执行MsgBox
方法,接着执行Exit Sub
函数,最后执行Private Sub cmdOpenPDF_Click()
On Error GoTo Errorhandler
Application.FollowHyperlink "E:\groups\folder\folder2\" & Dir("E:\groups\folder\folder2\*" & Me.txtInvNum & "*")
ExitSub:
Exit Sub
Errorhandler:
MsgBox "Unable to locate the file. I'm sorry this has happened.", vbOKOnly
Resume ExitSub
End Sub
语句。
为避免每次都对错误处理程序进行评估,错误处理程序的典型实现将在错误处理程序标签之前包含一个附加标签,用于表示干净退出,例如:
Exit Sub
这意味着在正常情况下,将在评估Errorhandler
后面的代码之前到达root
语句。