如何将受密码保护的MS Access数据库文件连接至Excel
带密码保护的MS Access与Excel稳定连接实现方案
前置校验
- 提前确认Access数据库格式(.mdb/.accdb)、数据库打开密码,不要启用旧版用户级工作组安全机制,普通单密码保护即可,否则需要额外加连接参数
- 确认本机Excel和Access位数一致,同为32位或64位,位数不匹配会直接连接失败,无兼容解决办法
推荐连接方案(无重复手动操作、支持全流程自动化)
不要用Excel默认向导里的可视化导入连接,这类连接普遍存在丢密码、刷新弹框、路径变动就失效的问题,直接用固定参数的无DSN连接串稳定性最高。
方案1:OLEDB连接(优先选,适配Power Query、VBA自动化场景)
根据数据库格式选对应连接串,把路径、密码替换成你自己的即可:
- 适配.accdb格式(Access 2007及以上版本):
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Access数据库完整本地/共享盘路径;Jet OLEDB:Database Password=你的数据库打开密码;Persist Security Info=False;
- 适配.mdb格式(Access 2003及更早版本):
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Access数据库完整本地/共享盘路径;Jet OLEDB:Database Password=你的数据库打开密码;Persist Security Info=False;
64位Office环境不要用Jet 4.0驱动,直接用ACE OLEDB 12.0驱动即可,向下兼容所有.mdb格式文件
连接串使用方法:
- 用Power Query做数据同步:导入数据时选择「高级选项」,直接粘贴配置好的连接串,勾选保存密码,后续刷新无需重复输入验证
- 用VBA做全流程自动化:通过ADODB对象调用连接串,全程不需要手动打开Access程序,数据传输完成后可以直接触发Excel端预置的业务处理流程,最简测试代码如下:
Sub AccessDataSync() Dim conn As Object, rs As Object Set conn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") ' 替换为你自己配置好的连接串 conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\业务数据\运营库.accdb;Jet OLEDB:Database Password=ops2024;Persist Security Info=False;" ' 替换为你需要查询的Access表名,也可以写自定义SQL语句做数据预筛选 rs.Open "SELECT * FROM 订单明细表 WHERE 订单日期>=#2024-1-1#", conn ' 将查询结果写入Excel指定单元格 ThisWorkbook.Sheets("数据源").Range("A1").CopyFromRecordset rs ' 关闭连接释放资源 rs.Close conn.Close Set rs = Nothing Set conn = Nothing ' 直接调用后续自动化流程宏,比如数据清洗、报表生成、自动发邮件等 Call 月度报表自动生成 End Sub
方案2:无DSN的ODBC连接(适合固定办公设备长期使用)
不需要在系统里新建ODBC数据源,直接在Excel连接属性里写入带密码参数的ODBC连接串即可,不会因为系统配置变动、路径调整出现连接失效,参数逻辑和上述OLEDB连接串一致。
稳定性避坑清单
- 数据库文件不要存放在桌面、U盘、实时同步盘(OneDrive、企业微信/钉钉同步文件夹等),建议放在固定本地磁盘或有权限控制的局域网共享盘,避免路径变动、文件被同步进程锁定导致连接失败
- 程序通过连接读写Access时,不要手动打开同一个数据库文件做编辑操作,会触发Access的文件锁机制导致读写报错;VBA操作完成后必须关闭连接、释放对象,避免残留后台进程锁死数据库
- 若刷新时报“找不到可安装的ISAM”错误,安装对应位数的Access Database Engine驱动即可解决,不要随意修改注册表配置
- 若数据库密码包含分号、单引号这类特殊字符,需要把密码整体用单引号包裹,例如
Jet OLEDB:Database Password='a;c@2024'
内容的提问来源于stack exchange,提问作者Khurram Liaquat
相关产品推荐
相关产品推荐

