我有一个基于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会引发错误?
答案 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,而是会弹出运行时错误。