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

时间:2015-08-26 22:24:29

标签: excel-vba windows-8 odbc dao windows-server-2012

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

它适用于Windows 7,但在Windows 8 / Server 2012上,它在第一次调用DAO时无法正常工作:

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

引发运行时错误号3633说明"Cannot load DLL: 'msrdo20.dll'"。这种情况发生在类库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 - 但这样做会更糟糕,我得到运行时错误429,&#34; ActiveX组件无法创建对象&#34;。< / p>

这是Windows Server 2012,Excel 2013。

2 个答案:

答案 0 :(得分:2)

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

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

提取物:

分辨率

  1. 下载Visual Basic 6.0 Service Pack 6(Vs6sp6.exe)
  2. 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 \ Sys64WOW \目录。
    3. 打开提升的命令提示符,导航到C:\ Windows \ Sys64WOW,然后注册MSRDO20.DLL。 RDOCURS.DLL不需要注册。

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

答案 1 :(得分:0)

当我使用regsvr32时,我忘记以管理员身份运行命令提示符。这就是为什么VBA无法找到DLL。