VBA Excel 运行-时间错误 自动化错误
VBA Excel Run-time error Automation error
我有一个 运行 时间错误
'-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
"close"表格的代码如下
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 代码以从数据库中检索数据。该窗体没有 Activate 事件处理程序。
有没有人遇到同样的问题,你是怎么处理的?
我能够重现错误。问题是您在表单内卸载表单。仅采用一个空的用户表单和模块中的以下代码。 运行 代码并单击 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
行为的原因是 class 销毁了自身,而 mForm 是一个模块范围的变量,它不知道它在第二次调用代码时被销毁了。
解决方案是避免 self-destroing class/userform 或作为解决方法使 mForm 成为局部变量。
这里有更好的解释
https://excelmacromastery.com/vba-user-forms-1/#Cancelling_the_UserForm
我有一个 运行 时间错误
'-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
"close"表格的代码如下
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 代码以从数据库中检索数据。该窗体没有 Activate 事件处理程序。 有没有人遇到同样的问题,你是怎么处理的?
我能够重现错误。问题是您在表单内卸载表单。仅采用一个空的用户表单和模块中的以下代码。 运行 代码并单击 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
行为的原因是 class 销毁了自身,而 mForm 是一个模块范围的变量,它不知道它在第二次调用代码时被销毁了。
解决方案是避免 self-destroing class/userform 或作为解决方法使 mForm 成为局部变量。
这里有更好的解释 https://excelmacromastery.com/vba-user-forms-1/#Cancelling_the_UserForm