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 Workspace
、Database
、DBEngine
、Connection
) 通过 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/
摘录:
分辨率
- 下载 Visual Basic 6.0 Service Pack 6 (Vs6sp6.exe)
http://www.microsoft.com/en-us/download/details.aspx?id=9183
- 运行 Vs6sp6.exe 并提取文件
- 打开 msrdo20.cab,其中包含以下文件:MSRDO20.DLL、MSRDO20.INF 和 RDOCURS.DLL。提取所有三个文件并将它们复制到 C:\Windows\SysWOW64\ 目录。
打开提升的(管理员)命令提示符,导航到 C:\Windows\SysWOW64,然后注册 MSRDO20.DLL。 RDOCURS.DLL不需要注册。
C:\Windows\System32> cd C:\Windows\SysWOW64
C:\Windows\SysWOW64> regsvr32 MSRDO20.DLL
我在 Excel 中有一个用 VBA 编写的遗留业务应用程序。它使用 VBA DAO 库(安装在 c:\program files (x86)\Common Files\Microsoft Shared\DAO\dao360.dll
)和 classes Workspace
、Database
、DBEngine
、Connection
) 通过 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/
摘录:
分辨率
- 下载 Visual Basic 6.0 Service Pack 6 (Vs6sp6.exe)
http://www.microsoft.com/en-us/download/details.aspx?id=9183
- 运行 Vs6sp6.exe 并提取文件
- 打开 msrdo20.cab,其中包含以下文件:MSRDO20.DLL、MSRDO20.INF 和 RDOCURS.DLL。提取所有三个文件并将它们复制到 C:\Windows\SysWOW64\ 目录。
打开提升的(管理员)命令提示符,导航到 C:\Windows\SysWOW64,然后注册 MSRDO20.DLL。 RDOCURS.DLL不需要注册。
C:\Windows\System32> cd C:\Windows\SysWOW64 C:\Windows\SysWOW64> regsvr32 MSRDO20.DLL