从Word VBA脚本调用CreateObject(“ Lotus.NotesSession”)时出现错误429

时间:2018-07-31 09:26:37

标签: vba ms-word lotus-notes lotus-domino early-binding

尝试在Word 2013中构建一个相当简单的VBA脚本,以访问来自特定Domino数据库的数据。如果我使用老式的OLE自动化(请参阅第2片段),但我的脚本运行良好,但是如果我希望通过早期绑定使用特定的Domino COM对象,则无法使用。

我确保在Windows 7(x64)计算机上正确安装了Word 2013 Notes 9.0.1 FP9。在Word的VBA编辑器中,我确保已启用对“ Lotus Domino对象”(domobj.tlb)的引用。

我知道创建NotesSession对象的版本多种多样,我想我都对它们进行了测试。这是“早期绑定”代码的一个示例:

Sub controlNotesCOM()
    Dim sn As NotesSession
    Dim db As NotesDatabase

    Set sn = CreateObject("Lotus.NotesSession")
    Call sn.Initialize

    MsgBox sn.COMMONUSERNAME, , "UserName"
    Set db = sn.GETDATABASE("", "mail\mymail.nsf")
    If (db.IsOpen()) Then
        MsgBox db.Size, , "Size"
    Else
        MsgBox "DB not open", , "ERROR"
    End If
End Sub

在调试模式下运行此代码段,我在第3行收到运行时错误429“ Active X组件无法创建对象”:

Set sn = CreateObject("Lotus.NotesSession")

我知道我过去运行过类似的代码,但这是Notes Word的早期版本(不记得哪个版本)。

以下使用OLE自动化的老式方法仍然可以使用,因此我认为这不是注册表问题:

Sub controlNotesOLE()
    Dim sn As Object
    Dim db As Object

    Set sn = CreateObject("Notes.NOTESSESSION")
    'Call sn.Initialize

    MsgBox sn.COMMONUSERNAME, , "UserName"
    Set db = sn.GETDATABASE("", "mail\lmueller.nsf")
    If (db.IsOpen()) Then
        MsgBox db.Size, , "Size"
    Else
        MsgBox "DB not open", , "ERROR"
    End If
End Sub

有人知道这里可能出什么问题吗?出于某种原因,这可能是不能起作用的组合吗?

1 个答案:

答案 0 :(得分:1)

哦,亲爱的,我想我明白了: Runtime error 429 in VBA, but class is registered

Notes Client(仍然)是32位的,确实我安装了64位版本的Office2013。所以这很有意义。

(提示:链接的帖子中有一些解决此问题的技巧;并不十分适合我当前的项目,但可能适合其他人)