我有一个基于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会引发错误?
您的问题的答案“为什么在设置错误处理程序时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,而是会弹出运行时错误。