IDE存在错误处理程序

时间:2018-03-01 11:01:25

标签: excel-vba vba excel

我有一个基于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

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

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

1 个答案:

答案 0 :(得分: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,而是会弹出运行时错误。