首页 >数据库 >mysql教程 >从 SQL 记录集中复制数据时,为什么我的 Excel-VBA 代码会出现'3704:对象关闭时不允许操作”错误?

从 SQL 记录集中复制数据时,为什么我的 Excel-VBA 代码会出现'3704:对象关闭时不允许操作”错误?

Linda Hamilton
Linda Hamilton原创
2024-12-30 20:48:11400浏览

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