1

尝试在 Word 2013 中构建一个相当简单的 VBA 脚本,以访问来自特定 Domino 数据库的数据。如果我求助于老式 OLE 自动化(参见第二个片段),我的脚本工作正常,但如果使用我非常喜欢的早期绑定的特定 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")

我知道我过去运行过类似的代码,但那是在早期版本的 NotesWord 中(不记得是哪个版本)。

但是,以下使用 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

有人知道这里可能出了什么问题吗?无论出于何种原因,这可能是一个无法工作的组合吗?

4

1 回答 1

1

哦,天哪,我想我明白了: VBA 中的运行时错误 429,但类已注册

Notes 客户端(仍然)是 32 位的,而且我确实安装了 Office 2013 的 64 位版本。所以这是有道理的。

(提示:链接的帖子有一些关于如何解决这个问题的提示;不太适合我当前的项目,但可能适用于其他项目)

于 2018-07-31T13:59:38.090 回答