莲花笔记给VBA

时间:2013-02-14 19:22:00

标签: vba lotus-notes

我坚持这个问题好几天

我必须阅读莲花笔记中的特定邮箱,并将所有内容带入excel电子表格

但到目前为止,我只能读取默认收件箱,无法切换到其他邮箱。我对VBA真的很新,任何人都可以帮我解决这个问题

这是我正在使用的代码

Set NSession = CreateObject("Notes.NotesSession")
   'get the name of the mailfile of the current user
DbLocation = NSession.GETENVIRONMENTSTRING("mail/mailbox", True)

'Get the notesdatabase for the mail.
Set NMailDb = NSession.GETDATABASE("mailboxer", DbLocation)
MsgBox (DbLocation)

我弹出一个空的msgbox

3 个答案:

答案 0 :(得分:3)

GetEnvironmentString()读取notes.ini文件。我不确定那是你真正想做的事情。仅从语法上看,我认为您使用“邮件/邮箱”作为占位符来查找您正在查找的邮箱的实际路径。例如,你真的想从“mail / jsmith.nsf”这样的东西中读取邮件。 (如果我错了,你真的想读取notes.ini文件来获取邮件文件的位置,那么你的问题是“邮件/邮箱”不是ini文件条目的有效密钥。 )

我的下一个假设是邮箱所在的Domino服务器称为“邮箱”,因为这就是你在GetDatabase()的第一个参数中所放置的内容。

如果我对这些事情是对的,那么你需要的是

Set NMailDb = NSession.GETDATABASE("mailboxer", "mail/mailbox") 

其中“mail / mailbox”将替换为您尝试打开的邮箱的实际路径。

答案 1 :(得分:1)

一些想法:

  • 如果您不必与Notes UI进行交互,则使用Lotus.NotesSession(Lotus.NotesSession是基于COM的,而Notes.NotesSession是基于OLE的)
  • 确保运行VBA应用程序的工作站上的Notes客户端用户具有打开和读取邮箱的权限

答案 2 :(得分:0)

正如D. Bugger所说,您需要确保在运行VB代码的同一客户端计算机上安装了Notes客户端,并且您需要确保包含nnotes.exe文件的文件夹和包含该文件夹的文件夹。 notes.ini文件位于您的环境路径中。 (如果没有,您将获得实例化Notes.NotesSession对象的COM错误。

如果这有帮助,这里有一些入门代码 - 未经过测试,但是粗略的指南...这将遍历Notes邮箱数据库中的所有文档,忽略除电子邮件文档之外的任何内容(其形式为field =“Memo”)并从每封电子邮件中抓取一些字段。

Public Sub exportNotesMail(MailServer$, MailDBPath$)
    Dim mailDb As Object, doc As Object, alldocs As Object, Session As Object
    Set Session = CreateObject("Notes.NotesSession")
    Set mailDb = Session.GETDATABASE(MailServer, MailDbPath$)
    If mailDb.IsOpen = False Then mailDb.OPENMAIL
    Set alldocs = mailDb.AllDocuments
    Set doc = alldocs.GetFirstDocument
    while not (doc is nothing)
        If doc.GetItemValue("Form")(0) = "Memo" Then
            thisSubject = doc.getItemValue("Subject")(0)
            thisFrom = doc.getItemValue("From")(0)
            ' get more field values
            ' Export to Excel or wherever
        End If
        Set doc = alldocs.GetNextDocument(doc)
    Next i

    ' done
End Sub

call exportNotesMail ("MyServer", "mail\myMailFile.nsf")