【问题标题】:Excel VBA run time error is raised by the IDE while there is an error handler setIDE 在设置错误处理程序时引发 Excel VBA 运行时错误
【发布时间】:2018-03-01 11:01:25
【问题描述】:

基于 VBA 的应用程序的用户报告了一个奇怪的错误
我想知道 VBA IDE 怎么可能引发错误,因为上面的行是错误处理程序。

代码如下。它创建了一个类 frmCfgPrjctTm 的形式。我曾经偶尔会遇到一些自动化错误,其中包含来自 VBA IDE 的奇怪消息。

运行时错误“-2147418105 (800100007)”: 自动化错误 调用的对象已与其客户端断开连接。 我在 Windows 7 上使用 Excel 2016 32 位。

为了解决这个问题,我必须实施重试策略来创建表单。这解释了重试循环。

错误是在 mForm.Show vbModeless 行引发的。 错误处理程序使用指令 On Error GoTo ErrorHandler 前一行设置!

Private mForm As frmCfgPrjctTm
''
' U_CfgPrjctTm_OnOpen
Public Sub U_CfgPrjctTm_OnOpen()
        Dim iRetry As Integer
        iRetry = 0
        If (mForm Is Nothing) Then
ErrorExit:
            If (iRetry > 1) Then
                Call U_UnlockTeam
                GoTo ExitSub
            End If
            iRetry = iRetry + 1
            Set mForm = New frmCfgPrjctTm
        End If
        On Error GoTo ErrorHandler
        '>>>>>> the error occurs after this comment
        mForm.Show vbModeless
ExitSub:
Exit Sub
ErrorHandler:
    Debug.Print "***** Error trapped in U_CfgPrjctTm_OnOpen *****"
    GoTo ErrorExit
End Sub

这篇文章提出了 2 个问题,但我正在寻求帮助或分享以下内容:

为什么在设置了错误处理程序时 IDE 会引发错误?

【问题讨论】:

  • 可能开启了“Break on all errors”选项
  • @Storax 在工具 > 选项菜单中?我没有看到类似的东西
  • @Storax 不,这不是解决方案。选项未设置在“中断所有错误”上,而仅设置在未处理的错误上
  • 删除标签 ErrorExit 并将 Goto ErrorExit 替换为 debug.print err.number 看看现在会发生什么。 IMO 像你一样跳回代码从来都不是一个好主意。我会重新考虑你的错误处理。

标签: excel vba


【解决方案1】:

您的问题“为什么在设置了错误处理程序时IDE会引发错误?”的答案是您以错误的方式使用错误处理。看下面的例子

 Option Explicit

    Sub TestErrH()

Dim i As Long

    i = 42

ErrorExit:

    On Error GoTo ErrorHandler
    Debug.Print 42 / i
    Debug.Print 1 / 0

    Exit Sub

ErrorHandler:
    i = 0
    GoTo ErrorExit

End Sub

错误处理程序将在 Debug.print 1/0 行中引发,然后错误处理程序将设置 i = 0 并跳回 debug.print 42/i 行。那时错误处理就在你手中。您必须确保代码是故障安全的。错误处理程序不会再次跳转到标签 ErrorHandler 而是会弹出运行时错误。

【讨论】:

  • 听起来很理性。在引发第一个错误之后,ErrorExit: 和 ErrorHandler 之间可能会发生第二个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
相关资源
最近更新 更多