首頁 >資料庫 >mysql教程 >從 SQL 記錄集中複製資料時,為什麼我的 Excel-VBA 程式碼會出現「3704:物件關閉時不允許操作」錯誤?

從 SQL 記錄集中複製資料時,為什麼我的 Excel-VBA 程式碼會出現「3704:物件關閉時不允許操作」錯誤?

Linda Hamilton
Linda Hamilton原創
2024-12-30 20:48:11383瀏覽

Why Does My Excel-VBA Code Get a

Excel-VBA 中用於SQL 資料庫存取的錯誤處理

從Excel-VBA 存取SQL 資料庫時,嘗試時會出現一個常見問題會將資料從記錄集複製到Excel 工作表,導致執行階段錯誤3704:「當物件為已關閉。」

根本原因:
錯誤訊息表明「CopyFromRecordset」方法中引用的記錄集 (objMyRecordset) 已關閉。如果與資料庫的連線遺失或記錄集明確提前關閉,則可能會發生這種情況。

解決方案:
要解決此問題,請確保資料庫連接穩定且記錄集在整個資料擷取過程中保持開放狀態。這是修改後的VBA 程式碼:

Sub GetDataFromADO()
    'Declare variables'
        Set objMyConn = New ADODB.Connection
        Set objMyRecordset = New ADODB.Recordset
        Dim strSQL As String

    'Open Connection'
        objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDatabase;User ID=abc;Password=abc;"
        objMyConn.Open

    'Set and Execute SQL Command'
        strSQL = "select * from myTable"

    'Open Recordset'
        Set objMyRecordset.ActiveConnection = objMyConn
        objMyRecordset.Open strSQL

    'Copy Data to Excel'
        ActiveSheet.Range("A1").CopyFromRecordset objMyRecordset

    'Close recordset and connection (optional, to ensure no open object handles)
        objMyRecordset.Close
        objMyConn.Close
End Sub

注意:
重要的是要注意,應在資料之後使用「關閉」方法(對於記錄集和連接物件) - 檢索過程已完成,以避免潛在的錯誤。但是,並不是絕對有必要明確關閉這些對象,因為它們應該在子程式退出時自動關閉。

以上是從 SQL 記錄集中複製資料時,為什麼我的 Excel-VBA 程式碼會出現「3704:物件關閉時不允許操作」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn