首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA Excel运行时错误自动化错误

VBA Excel运行时错误自动化错误
EN

Stack Overflow用户
提问于 2018-03-02 14:58:56
回答 1查看 3.1K关注 0票数 0

我有一个运行时错误

'-2147418105 (800100007)':被调用的对象与其客户端断开连接的自动化错误。

偶尔也会被提出来。对于这个错误,我不能将它与特定的上下文联系起来。我唯一的线索是,在使用ADO代码之前,我从未犯过这个错误。实现的模式被多次使用。

我在windows 7上使用Excel 2016 32位和一个vba代码。

代码语言:javascript
复制
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

要“关闭”表单的代码如下

代码语言:javascript
复制
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在枚举中被定义为在关闭表单之前错误地执行用户操作)

代码语言:javascript
复制
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

在表格代码中

代码语言:javascript
复制
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代码,以从数据库中提取数据。窗体没有激活事件处理程序。有人有同样的问题吗?你是如何处理的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-02 16:04:54

我能重现这个错误。问题是您在表单中卸载表单。只需要一个空的userform和模块中的以下代码。运行代码并通过单击X关闭表单。表单后面不应该有任何代码!如果您第二次运行该代码,您将得到提到的错误。

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49071706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档