【发布时间】: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 像你一样跳回代码从来都不是一个好主意。我会重新考虑你的错误处理。