在设置错误处理程序时,IDE会引发Excel VBA运行时错误

问题描述 投票:0回答:1

我有一个基于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会引发错误?

excel-vba vba excel
1个回答
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,而是会弹出运行时错误。

© www.soinside.com 2019 - 2024. All rights reserved.