为何已安装Office但未注册的Microsoft.ACE.OLEDB.15.0可在VBA中使用?
解决PowerShell无法找到Microsoft.ACE.OLEDB.15.0驱动但VBA可用的问题
这是个典型的32位/64位环境不匹配问题,我帮你拆解一下原因和解决办法:
核心原因
你的Excel VBA是跟着Office的运行位数走的,但PowerShell默认可能运行在另一个位数的环境里:
- 如果你装的是32位Office,VBA会在32位进程中运行,能正常调用32位的ACE驱动;但如果你的PowerShell是64位的,它只能读取64位注册表项里的驱动,自然找不到32位的
Microsoft.ACE.OLEDB.15.0。 - 反之,如果Office是64位,但你打开了32位PowerShell,也会出现同样的找不到驱动的情况。
具体解决步骤
1. 确认两边的运行位数
- 检查Office位数:打开Excel → 点击「文件」→「账户」→「关于Excel」,在弹出的窗口里能看到是32位还是64位版本。
- 检查PowerShell位数:打开PowerShell,输入以下命令并回车:
返回[Environment]::Is64BitProcessTrue表示是64位PowerShell,False则是32位。
2. 匹配PowerShell的运行位数
如果Office和当前PowerShell位数不匹配,切换到对应位数的PowerShell即可:
- Office是32位:打开32位PowerShell,路径一般是:
打开后再查询驱动列表,就能找到C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exeMicrosoft.ACE.OLEDB.15.0了。 - Office是64位:确保你打开的是默认的64位PowerShell(路径是
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe),如果之前误开了32位版本,切换过来就能正常识别驱动。
3. 手动注册驱动(可选,仅当驱动确实未注册时)
如果确认位数匹配但还是找不到,可以手动注册ACE驱动的DLL:
- 32位驱动注册命令(以Office 2013为例,路径可能因版本不同略有变化):
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\Microsoft Office\Office15\ACEODBC.dll" - 64位驱动注册命令:
注意:执行命令时需要以管理员身份运行命令提示符。C:\Windows\System32\regsvr32.exe "C:\Program Files\Microsoft Office\Office15\ACEODBC.dll"
补充说明
你提供的VBA代码能正常运行,正是因为VBA的进程位数和ACE驱动的位数完全匹配,而PowerShell因为位数不兼容,才看不到这个驱动。只要调整PowerShell的运行位数,就能解决问题啦。
内容的提问来源于stack exchange,提问作者palazzo train
相关产品推荐
相关产品推荐

