为啥错误处理程序触发时没有错误? [复制]
Posted
技术标签:
【中文标题】为啥错误处理程序触发时没有错误? [复制]【英文标题】:Why does error handler trigger with no error? [duplicate]为什么错误处理程序触发时没有错误? [复制] 【发布时间】:2019-09-18 21:01:03 【问题描述】:单击按钮时,我正在运行一行代码来打开 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 打开没有问题,我希望没有错误。同样令人费解的是,在没有错误处理程序的情况下运行时没有错误。有谁知道它为什么这样做?
【问题讨论】:
将Exit Sub
移到Errorhandler:
行之前。
【参考方案1】:
在您的代码中,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
在这里,VBA 将尽职尽责地执行FollowHyperlink
方法,然后是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
标签后面的代码之前到达。
【讨论】:
感谢您的解释。我没有意识到以这种方式使用标签的细节。现在可以正常使用了。以上是关于为啥错误处理程序触发时没有错误? [复制]的主要内容,如果未能解决你的问题,请参考以下文章