![](/img/trans.png)
[英]Run-time error while fetching data from SQL Server through Excel VBA
[英]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.