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
相关产品推荐
相关产品推荐

