VBA的lotusnotes

VBA的lotusnotes,vba,lotus-notes,Vba,Lotus Notes,我被这个问题困扰了好几天 我必须阅读lotus notes中的特定邮箱,并将所有内容放入excel电子表格中 但到目前为止,我只能阅读默认的收件箱,无法切换到其他邮箱。我是VBA新手,有人能帮我解决这个问题吗 这是我正在使用的代码 Set NSession = CreateObject("Notes.NotesSession") 'get the name of the mailfile of the current user DbLocation = NSession.GETENVIRO

我被这个问题困扰了好几天

我必须阅读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,读取notes.ini文件。我不确定那是你真正想做的。仅从语法上看,我认为您正在使用“mail/mailbox”作为您要查找的邮箱的实际路径的占位符。例如,您实际上是在试图阅读类似“mail/jsmith.nsf”的邮件。(如果我错了,并且您确实希望读取notes.ini文件以获取邮件文件的位置,那么您的问题是“mail/mailbox”不是ini文件条目的有效密钥。)

我的下一个假设是,邮箱所在的Domino服务器被称为“mailboxer”,因为这是您在GetDatabase()的第一个参数中输入的内容

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

Set NMailDb = NSession.GETDATABASE("mailboxer", "mail/mailbox") 
其中“mail/mailbox”替换为您尝试打开的邮箱的实际路径

GetEnvironmentString()读取notes.ini文件。我不确定那是你真正想做的。仅从语法上看,我认为您正在使用“mail/mailbox”作为您要查找的邮箱的实际路径的占位符。例如,您实际上是在试图阅读类似“mail/jsmith.nsf”的邮件。(如果我错了,并且您确实希望读取notes.ini文件以获取邮件文件的位置,那么您的问题是“mail/mailbox”不是ini文件条目的有效密钥。)

我的下一个假设是,邮箱所在的Domino服务器被称为“mailboxer”,因为这是您在GetDatabase()的第一个参数中输入的内容

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

Set NMailDb = NSession.GETDATABASE("mailboxer", "mail/mailbox") 
其中“mail/mailbox”替换为您尝试打开的邮箱的实际路径

一些想法:

  • 如果不必与Notes UI交互,请使用Lotus.noteSession(Lotus.noteSession是基于COM的,而Notes.noteSession是基于OLE的)
  • 确保运行VBA应用程序的工作站上Notes客户端的用户具有打开和读取邮箱所需的权限
    • 一些想法:

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

      如D.Bugger所述,您需要确保在运行VB代码的同一台客户机上安装了Notes客户端,并且需要确保包含Notes.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")
      

      正如D.Bugger所说,您需要确保在运行VB代码的同一台客户机上安装了Notes客户端,并且需要确保包含Notes.exe文件的文件夹和包含Notes.ini文件的文件夹位于您的环境路径中。(否则,实例化Notes.notession对象时会出现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")