为什么错误处理程序触发时没有错误?

时间:2019-09-18 21:01:03

标签: vba ms-access access-vba

单击按钮后,我正在运行一行代码来打开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可以正常打开,所以我希望不会有任何错误。令人费解的是,如果没有错误处理程序,则在运行时没有错误。有人知道它为什么这样做吗?

1 个答案:

答案 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语句。