Excel VBA运行时错误'3706':找不到Microsoft.Jet.OLEDB.4.0驱动
首先,咱们先梳理下你的情况:你的VBA代码在多台不同系统、Office版本的测试机上都能正常运行,但在客户那台Win10 64位+32位Office的电脑上触发了3706错误——找不到Provider。已经核对过系统和Office版本一致,那接下来可以从这几个方向逐一排查:
1. 检查并安装32位ACE驱动(核心排查项)
你代码里用到的Microsoft.Jet.OLEDB是比较老旧的驱动,在64位系统搭配32位Office的混合环境下很容易出兼容性问题。现在微软推荐使用Microsoft Access Database Engine (ACE)驱动,而且必须和Office位数匹配(也就是安装32位ACE驱动,因为客户是32位Office)。
- 先让客户卸载可能存在的64位ACE驱动(如果之前误装过),再安装对应版本的32位ACE驱动;
- 注意:如果客户电脑上有64位的Office组件(比如64位Excel Viewer),会和32位ACE驱动冲突,需要先卸载这类组件再安装。
2. 修正连接字符串的两处错误
你的代码里有两个明显的问题,直接会导致Provider加载失败:
- Win64分支用了
Microsoft.Jet.OLEDB.12.0——这是完全错误的,Jet驱动最高版本是4.0,12.0是ACE驱动的版本号; - 连接字符串末尾少了一个闭合的双引号,语法错误也会触发驱动识别失败。
建议直接统一用ACE驱动,去掉不必要的Win64/Win32分支(因为32位Office的VBA运行环境永远是32位,和系统位数无关),修正后的连接字符串如下:
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 8.0;HDR=Yes"";"
3. 清理重复的ADODB引用
你同时添加了Microsoft ActiveX Data Objects 6.1 Library和Microsoft ActiveX Data Recordset 2.8 Library,这两个引用会产生冲突——ADODB 6.1库已经包含了Recordset对象,单独引用旧版本的Recordset库会导致对象加载异常。
操作步骤:
- 打开VBA编辑器,点击
工具→引用; - 取消勾选
Microsoft ActiveX Data Recordset 2.8 Library,只保留Microsoft ActiveX Data Objects 6.1 Library; - 保存文件后重新测试。
4. 验证ACE驱动是否正确注册
有时候驱动安装了但没注册成功,也会触发3706错误。让客户打开32位命令提示符(路径是C:\Windows\SysWOW64\cmd.exe),运行对应Office版本的注册命令:
- Office 2016/2019/365:
regsvr32.exe "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE16\ACEOLEDB.DLL" - Office 2013:
regsvr32.exe "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\ACEOLEDB.DLL" - Office 2010:
regsvr32.exe "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL"
如果弹出“DllRegisterServer在ACEOLEDB.DLL succeeded”的提示,说明注册成功;如果报错,就卸载ACE驱动重新安装。
5. 检查文件路径与权限
- 确保Excel文件的保存路径没有特殊字符(比如中文、空格、
&/*这类符号),路径过长也可能导致驱动无法识别; - 让客户把文件移到桌面这类权限充足的文件夹测试,有时候系统文件夹或加密文件夹的权限限制会导致驱动无法读取文件。
6. 用简化代码排查问题
写一个极简的连接测试代码,排除原代码中其他逻辑的干扰:
Sub TestACEConnection() Dim cn As ADODB.Connection Set cn = New ADODB.Connection On Error GoTo ErrHandler ' 用修正后的ACE连接字符串 cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 8.0;HDR=Yes"";" MsgBox "数据库连接成功!" cn.Close Exit Sub ErrHandler: MsgBox "连接失败:错误码" & Err.Number & " - " & Err.Description End Sub
如果这个简化代码也报错,那问题肯定出在驱动或系统环境上;如果成功,再逐步排查原代码的SQL语句、Recordset操作部分。
内容的提问来源于stack exchange,提问作者Fabrizio




