【问题标题】:VBA - How do I specify the Inbox instead of using my inbox?VBA - 如何指定收件箱而不是使用我的收件箱?
【发布时间】:2021-11-23 06:16:57
【问题描述】:

在我的 Excel 电子表格中,我有 A 列和 B 列。在 A 列中,我有电子邮件地址,在 B 列中,我有唯一变量。下面的代码旨在查看收件箱,比较是否有任何主题行与 B 列中的唯一变量匹配,如果匹配,则将电子邮件转发到该唯一变量的 A 列中的电子邮件地址。这是当前的代码:

Public Sub Forward_Email(findSubjectLike As String, forwardToEmailAddresses As String)

    Dim NSession As Object
    Dim NMailDb As Object
    Dim NViewObj As Object
    Dim NInboxView As Object
    Dim NDocument As Object
    Dim NUIWorkspace As Object
    Dim NUIDocument As Object
    Dim NFwdUIDocument As Object
   
    
    Set NSession = CreateObject("Lotus.NotesSession")
    Call NSession.Initialize("password")
    
    Set NUIWorkspace = CreateObject("Notes.NotesUIWorkspace")
    Set NMailDb = NSession.GetDatabase("", "TEST.nsf")
    Set NViewObj = NMailDb.GetView("Inbox")
    Set NDocument = Find_Document(NInboxView, findSubjectLike)
   
    If Not NDocument Is Nothing Then
   

       
        Set NUIDocument = NUIWorkspace.EditDocument(False, NDocument)
       
      
       
        NUIDocument.Forward
       
   
       
        Set NFwdUIDocument = NUIWorkspace.CurrentDocument
        Sleep 100
       
       
        NFwdUIDocument.GoToField "To"
        Sleep 100
        NFwdUIDocument.InsertText forwardToEmailAddresses
       
     
       
        NFwdUIDocument.GoToField "Body"
        NFwdUIDocument.InsertText "This email was forwarded at " & Now
        NFwdUIDocument.InsertText vbLf

        
       
        NFwdUIDocument.Send
        NFwdUIDocument.Close

       
        Do
            Set NUIDocument = NUIWorkspace.CurrentDocument
            Sleep 100
            DoEvents
        Loop While NUIDocument Is Nothing
        NUIDocument.Close
       
    Else
   
        MsgBox vbCrLf & findSubjectLike & vbCrLf & "not found in Inbox"

    End If
   
    Set NUIDocument = Nothing
    Set NFwdUIDocument = Nothing
    Set NDocument = Nothing
    Set NMailDb = Nothing
    Set NUIWorkspace = Nothing
    Set NSession = Nothing
   
End Sub

Private Function Find_Document(NView As Object, findSubjectLike As String) As Object

    Dim NThisDoc As Object
    Dim thisSubject As String
   
    Set Find_Document = Nothing
   
    Set NThisDoc = NView.GetFirstDocument
    While Not NThisDoc Is Nothing And Find_Document Is Nothing
        thisSubject = NThisDoc.GetItemValue("Subject")(0)
        If LCase(thisSubject) = LCase(findSubjectLike) Then Set Find_Document = NThisDoc
        Set NThisDoc = NView.GetNextDocument(NThisDoc)
    Wend

End Function

问题是现在代码在登录用户的用户收件箱中查看(在这种情况下是我)。我打开了另一个收件箱(我们称之为 TEST)我是否能够指定此代码来查看来自打开的 TEST 收件箱的信息。现在它将我的收件箱中的信息与 TEST 进行比较,因为它触发了“收件箱中未找到”的错误行。

它目前所做的是在我的发现中查找唯一变量,然后尝试与 TEST 比较该主题行以转发它。我希望它同时查看 TEST,然后与 TEST 进行比较。

【问题讨论】:

    标签: excel vba database email lotus-notes


    【解决方案1】:

    您声明“问题是现在代码在已登录用户的用户收件箱中查找”。它没有。它使用 NSession.CurrentDatabase,并且您的 NotesSession 使用 Notes OLE 类加载到 VBA 中。这是 OLE 类,因为您使用的是 Notes.NotesSession 而不是 Lotus.NotesSession。在使用 Lotus.NotesSession 时加载的 COM 类中,未定义 CurrentDatabase 属性。在 OLE 类中,老实说,我不知道 OLE 类中的预期行为是什么,但我确信您不能依赖当前数据库始终是当前用户的邮箱数据库。

    无论如何,如果您想访问其他用户的收件箱,首先您必须打开该用户的邮箱数据库。为此,您必须知道邮箱数据库所在的服务器,以及该服务器上邮箱的路径。为此,您可以编写代码从 Domino 目录中该用户的个人文档中读取该信息,或者您可以将该信息放入每个用户的电子表格中。有了它,您可以使用 NotesSession.GetDatabase,打开数据库,并或多或少地以您访问自己的邮箱数据库的方式访问它。

    【讨论】:

    • 我已经调整了我的代码并确保输入了正确的 .nsf 文件名,但我在 For Each NViewObj In NMailDb.Views 行得到了“对象变量或未设置块变量”。使用 Lotus.NotesSession 请求初始化我的会话。
    • 我使用了 Lotus.NotesSession 并对其进行了初始化,但是当我尝试获取我的收件箱视图时,它现在状态数据库尚未打开。这是因为权限不足吗?
    • 可能是访问控制问题。你能打开你的测试吗?来自 Notes 客户端的 NSF 数据库是否使用您在运行此代码时使用的同一 Notes ID?
    猜你喜欢
    • 2021-02-05
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多