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

K753

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

李·麦克

在您的代码中,Errorhandler仅仅是行标签,该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标签后的代码之前到达语句

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

错误处理程序即使没有错误也能正常工作

是否可以在没有错误处理程序的情况下对 CommandInvokeError 进行例外处理?

为什么只有一个 VBA 错误处理程序处理错误?

为什么我的RxJS订阅错误处理程序不触发?

为什么 Codeblocks 运行这个 C 程序没有错误,但 Codeforces 显示编译错误?

$ .when()中没有错误时,为什么会触发fail()?

为什么未调用我的Flask错误处理程序?

React 错误处理 - 为什么应用程序崩溃?

当没有路由匹配时覆盖Falcon的默认错误处理程序

ValidationError 没有被快速错误处理程序捕获

为什么CUDA 8.0(有时)有错误的内存访问权限,而7.5没有?

为什么批处理脚本在没有错误代码的情况下崩溃?

运行具有错误处理且没有快速失败的并行任务

此Dart错误处理程序有什么问题?

用x替换字符串中的整数而没有错误处理

我没有错误,但为什么我的应用程序闭上

为什么我的Node.js被“程序终止”而没有错误

如何检查为什么我的 android 应用程序崩溃没有错误

为什么此C程序崩溃?没有错误报告

服务中带有错误处理程序声明的基本 Angular 语法问题

为什么下面的代码编译时没有错误?

在浏览器的文件URL中输入许多斜杠时,为什么没有错误?

为什么状态为500时,球衣没有错误日志?

为什么int i = 1024 * 1024 * 1024 * 1024编译时没有错误?

为什么输入大于malloc大小的字母时没有错误?

为什么C标准允许此代码编译时没有错误?

为什么在执行该算法的IF语句时没有错误?

为什么此代码在C ++ 17中编译时没有错误?

当我推入超过Vec容量的元素时,为什么没有错误?