64位Excel创建Lotus.NotesSession时出现ActiveX组件无法创建对象错误
问题重现
你遇到的情况非常典型:这段VBA代码在32位Excel里运行毫无问题,但切换到64位Excel后就会抛出运行时错误'429':ActiveX component can't create object:
Sub Macro() Dim Session As NotesSession Set Session = CreateObject("Lotus.NotesSession") End Sub
原因分析
你的推测完全正确——Lotus Domino Objects库本身是32位组件,64位程序(这里指64位Excel)无法直接加载32位的ActiveX控件,这是系统架构不兼容导致的核心问题。而你尝试用regsvr32注册c:\notes\nlsxbe.dll没用,是因为64位系统里默认的regsvr32是64位版本,它根本无法注册32位的DLL文件。
可行的解决方案
下面给你几个实用的解决思路,按优先级排序:
1. 安装64位版Lotus Notes/Domino客户端(最优解)
如果你的组织已经部署了64位的Lotus客户端,直接安装对应版本,之后在64位Excel里引用64位的Lotus Domino Objects库(路径一般是C:\Program Files\IBM\Notes\nlsxbe.dll),再运行代码就能正常创建NotesSession对象了。
2. 强制Excel以32位模式运行
如果暂时没有64位Lotus客户端,最简单的办法是让64位Excel切换到32位环境:
- 打开控制面板 → 程序和功能 → 找到Microsoft Office → 点击「更改」
- 选择「添加或删除功能」→ 展开「Excel」选项
- 把「运行所有程序」对应的选项改成「32位」,完成安装后重启Excel
这样Excel就会以32位模式运行,自然能兼容32位的Lotus组件。
3. 尝试32/64位COM桥接工具(备选方案)
如果必须保留64位Excel,又只能用32位Lotus组件,可以考虑使用COM Surrogate或者第三方的32/64位桥接工具,但这种方法配置复杂,稳定性也不如前两种,只推荐在前两个方案不可行时尝试。
4. 改用Lotus Notes REST API(长期方案)
如果你的Lotus Domino服务器支持REST服务,可以完全绕开ActiveX组件,直接用VBA发送HTTP请求调用REST接口实现业务逻辑。这种方法不受32/64位架构限制,也是更通用的长期解决方案。
补充提示
另外要注意:64位系统里的32位regsvr32路径是C:\Windows\SysWOW64\regsvr32.exe,即便用它成功注册了32位DLL,64位Excel依然无法加载该组件,所以这个操作对解决问题没有实际帮助,不用再尝试了。
内容的提问来源于stack exchange,提问作者Takichiii

