我有一个运行时错误
'-2147418105 (800100007)':被调用的对象与其客户端断开连接的自动化错误。
偶尔也会被提出来。对于这个错误,我不能将它与特定的上下文联系起来。我唯一的线索是,在使用ADO代码之前,我从未犯过这个错误。实现的模式被多次使用。
我在windows 7上使用Excel 2016 32位和一个vba代码。
Private mForm As frmCfgPrjctTm
Public Sub U_CfgPrjctTm_OnOpen()
If (mForm Is Nothing) Then
Call U_UnlockTeam
Set mForm = New frmCfgPrjctTm
End If
'>>>>>> the error occurs after this comment
mForm.Show vbModeless
End Sub要“关闭”表单的代码如下
Public Sub U_CfgPrjctTm_OnClose()
If (Not mForm Is Nothing) Then
mForm.Hide
Dim tmp As frmCfgPrjctTm
Set tmp = mForm
Set mForm = Nothing
Unload tmp
End If
End Sub在表单代码中(childCfgPrjctTmSettings和childCfgPrjctTmSettings在枚举中被定义为在关闭表单之前错误地执行用户操作)
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Call U_UnlockTeam
Select Case CloseMode
Case vbAppWindows, vbAppTaskManager
Call U_CfgPrjctTm_OnClose
Case vbFormControlMenu, vbFormCode
Call Save
Select Case mbOpenForm
Case childCfgPrjctTmSettings
' this opens another form
Call U_Sttngs_OnOpen(delUsr)
Case childCfgPrjctTmUsrId
' this opens another form
Call U_UsrLggd_OnOpen(dpyUsrLggdCfgPrjctTeam)
End Select
End Select
Cancel = False
End Sub在表格代码中
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Call U_UnlockTeam
Select Case CloseMode
Case vbAppWindows, vbAppTaskManager
Call U_CfgPrjctTm_OnClose
Case vbFormControlMenu, vbFormCode
Call Save
Select Case mbOpenForm
Case childCfgPrjctTmSettings
Call U_Sttngs_OnOpen(delUsr)
Case childCfgPrjctTmUsrId
Call U_UsrLggd_OnOpen(dpyUsrLggdCfgPrjctTeam)
End Select
End Select
Cancel = False结束子对象
此错误是在创建窗体后引发的,并在此时显示出来。调用U_UnlockTeam涉及一些内部调用的ADO代码,以从数据库中提取数据。窗体没有激活事件处理程序。有人有同样的问题吗?你是如何处理的?
发布于 2018-03-02 16:04:54
我能重现这个错误。问题是您在表单中卸载表单。只需要一个空的userform和模块中的以下代码。运行代码并通过单击X关闭表单。表单后面不应该有任何代码!如果您第二次运行该代码,您将得到提到的错误。
Option Explicit
Private mForm As UserForm1
Public Sub U_CfgPrjctTm_OnOpen()
If mForm Is Nothing Then
'Call U_UnlockTeam
Set mForm = New UserForm1
End If
'>>>>>> the error occurs after this comment
mForm.Show vbModeless
End Sub造成这种行为的原因是类破坏了自己,而mForm是一个模块范围的变量,在第二次调用代码时不知道它被销毁了。
解决方案是避免自毁类/用户表单,或者作为解决办法,使mForm成为局部变量。
下面是一个更好的解释-- UserForm
https://stackoverflow.com/questions/49071706
复制相似问题