You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access ACCDB文件连接及VBA执行SQL查询导出Excel问题

解决Access ACCDB连接失败的VBA问题

老兄,你这问题一眼就能揪出根源——驱动用错了!你代码里写的Microsoft.Jet.OLEDB.4.0是给旧版Access MDB格式文件用的,而你要连接的是ACCDB(Access 2007及以后版本的格式),必须换用ACE驱动才行。另外你的文件路径还少了个关键的反斜杠,这也是容易踩的低级坑。

我给你整理了完整的修正方案:

核心修正点

  • 替换连接字符串的Provider为Microsoft.ACE.OLEDB.12.0(兼容所有ACCDB版本,Office 2007+都支持;如果是Office 2016及以后,也可以用Microsoft.ACE.OLEDB.16.0)
  • 修复文件路径的语法错误:C:Users\jswizzle\Testdb.accdb → C:\Users\jswizzle\Testdb.accdb(根目录后必须加反斜杠)

完整可运行的代码

Sub Select_From_Access()
    Dim cn As Object, rs As Object
    Dim intColIndex As Integer
    Dim DBFullName As String
    Dim TargetRange As Range
    
    ' 修正后的文件路径(注意根目录后的反斜杠)
    DBFullName = "C:\Users\jswizzle\Testdb.accdb"
    
    Application.ScreenUpdating = False
    ' 指定结果输出的起始单元格
    Set TargetRange = Sheets("Sheet1").Range("A1")
    
    ' 创建ADODB连接对象
    Set cn = CreateObject("ADODB.Connection")
    ' 用ACE驱动连接ACCDB文件
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & DBFullName & ";"
    
    ' 创建记录集对象并执行SQL查询(替换成你的实际查询语句)
    Set rs = CreateObject("ADODB.Recordset")
    rs.Open "SELECT * FROM YourTableName;", cn, adOpenStatic, adLockReadOnly
    
    ' 输出字段名到Excel表头
    For intColIndex = 0 To rs.Fields.Count - 1
        TargetRange.Offset(0, intColIndex).Value = rs.Fields(intColIndex).Name
    Next intColIndex
    
    ' 输出查询结果到Excel
    TargetRange.Offset(1, 0).CopyFromRecordset rs
    
    ' 清理资源,避免内存泄漏
    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing
    
    Application.ScreenUpdating = True
    MsgBox "数据导入完成!", vbInformation
End Sub

额外注意事项

  • ACE驱动兼容性:如果你的Office是64位,必须安装64位的ACE驱动;32位Office对应32位驱动。找不到驱动的话,直接安装Microsoft Access Database Engine Redistributable就行(不用单独装Access)
  • 权限问题:确保Excel有访问目标ACCDB文件的权限,别把数据库放在Program Files这类受系统保护的目录里
  • SQL语句:记得把代码里的YourTableName替换成你实际要查询的表名,或者写好完整的自定义SQL语句

内容的提问来源于stack exchange,提问作者JSwordy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:18:44