Excel VBA DBEngine.CreateWorkspace 失败说无法加载 DLL

Excel VBA DBEngine.CreateWorkspace fails saying cannot load DLL

我在 Excel 中有一个用 VBA 编写的遗留业务应用程序。它使用 VBA DAO 库(安装在 c:\program files (x86)\Common Files\Microsoft Shared\DAO\dao360.dll)和 classes WorkspaceDatabaseDBEngineConnection ) 通过 ODBC 连接到 SQL 数据库。

它在 Windows 7 之前都可以正常工作,但是在 Windows 8 /Server 2012 上,它在第一次调用 DAO 时不起作用:

Set ws = DBEngine.CreateWorkspace(wsName, "", "", dbUseODBC)

引发 运行时间错误编号 3633 描述 "Cannot load DLL: 'msrdo20.dll'"。这发生在 class 库的 DBEngine.Errors 和常规 VBA Err 对象中。

无论文件 msrdo20.dll 是否存在,都会出现此错误。

我找到了 https://support.microsoft.com/en-us/kb/260369 上面说要包括 ODBCDirect,但这似乎不相关。

我找到了 http://www.xtremevbtalk.com/archive/index.php/t-172385.html 这建议从引用中删除 Microsoft DAO 3.6 并切换到 DAO 3.5——但这样做会使事情变得更糟,我得到 运行-time error 429, "ActiveX component can't create object".

这是 Windows 服务器 2012,Excel 2013。

当我使用 regsvr32 时,我忘记了 运行 我的命令提示符作为管理员。这就是 VBA 无法找到 DLL 的原因。

这个博客为我解决了这个问题:

http://pwaldman.com/unable-to-load-msrdo20-dll-or-rdocurs-dll/

摘录:

分辨率

  1. 下载 Visual Basic 6.0 Service Pack 6 (Vs6sp6.exe)

http://www.microsoft.com/en-us/download/details.aspx?id=9183

  1. 运行 Vs6sp6.exe 并提取文件
  2. 打开 msrdo20.cab,其中包含以下文件:MSRDO20.DLL、MSRDO20.INF 和 RDOCURS.DLL。提取所有三个文件并将它们复制到 C:\Windows\SysWOW64\ 目录。
  3. 打开提升的(管理员)命令提示符,导航到 C:\Windows\SysWOW64,然后注册 MSRDO20.DLL。 RDOCURS.DLL不需要注册。

     C:\Windows\System32> cd C:\Windows\SysWOW64
     C:\Windows\SysWOW64> regsvr32 MSRDO20.DLL