簡體   English   中英

VBA Excel運行時錯誤自動化錯誤

[英]VBA Excel Run-time error Automation error

我發生執行階段錯誤

'-2147418105(800100007)':自動化錯誤調用的對象已與其客戶端斷開連接。

偶爾會提出來。 我無法將其與此錯誤的特定上下文相關聯。 我唯一的線索是,在使用ADO代碼之前,我從未遇到過該錯誤。 實現的模式已被多次使用。

我在Windows 7上使用帶有vba代碼的Excel 2016 32位。

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代碼,以檢索數據庫中的數據。 該表單沒有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

出現這種情況的原因是該類自行銷毀,而mForm是模塊范圍的變量,在第二次調用該代碼時不知道它已銷毀。

解決方案是避免自毀類/用戶窗體,或者將mForm用作局部變量來解決。

這是一個更好的解釋https://excelmacromastery.com/vba-user-forms-1/#Cancelling_the_UserForm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM