5

我编写了一个 VBA 应用程序,它在 Outlook 中打开一个文件夹,然后遍历消息。我需要将消息正文(经过一些调整)写入单个平面文件。我的代码如下...

Private Sub btnGo_Click()
    Dim objOutlook As New Outlook.Application
    Dim objNameSpace As Outlook.NameSpace
    Dim objInbox As MAPIFolder
    Dim objMail As mailItem
    Dim count As Integer

    Set objNameSpace = objOutlook.GetNamespace("MAPI")
    Set objInbox = objNameSpace.GetDefaultFolder(olFolderInbox)
    count = 0

    For Each objMail In objInbox.Items
       lblStatus.Caption = "Count: " + CStr(count)
       ProcessMailItem (objMail)
       count = count + 1
    Next objMail

  End If
End Sub

有问题的部分是“ProcessMailItem”。因为我在这个阶段并不太关心性能,所以非常低效的“打开、附加、关闭”文件方法对于这个例子来说很好。

我知道我可以花一些时间用谷歌查找答案,但我先在这里查了一下,没有很好的答案。作为 Stackoverflow 的粉丝,我希望把它放在这里可以帮助未来的开发人员寻找答案。谢谢你的耐心。

4

3 回答 3

6

您可以在不使用任何对象的情况下写入文件,只需使用内置的 VBA 文件工具:

Open "C:\file.txt" for append as 1
Print #1, SomeStringVar
Close #1
于 2008-12-30T20:16:18.050 回答
4

如果您不介意每次附加一些文本时都重新打开输出文件,那么这应该可以工作。

Private Sub ProcessMailItem(objMail As MailItem)

    Dim fso As New FileSystemObject
    Dim ts As TextStream

    Set ts = fso.OpenTextFile("C:\Outputfile.txt", ForAppending, True)

    ts.Write(objMail.Body)

    ts.Close()
    Set ts = Nothing
    Set fso = Nothing

End Sub

您还需要添加对 Microsoft Scripting Runtime 库的引用。这里面有 FileSystemObject。

于 2008-12-30T18:07:20.027 回答
1

您还必须注意“尝试访问电子邮件地址”的安全弹出窗口,该弹出窗口包含在面向开发人员的 Outlook“对象模型保护”安全问题中

Public Sub ProcessMailItem(objMail As MailItem)
Dim FSO As New FileSystemObject
Dim ts As TextStream
Dim loc As String
Dim subject As String
Dim strID As String
' per http://www.outlookcode.com/article.aspx?ID=52
Dim olNS As Outlook.NameSpace
Dim oMail As Outlook.MailItem

strID = MyMail.EntryID
Set olNS = Application.GetNamespace("MAPI")
Set oMail = olNS.GetItemFromID(strID)
subject = oMail.subject
Set ts = FSO.OpenTextFile("C:\Documents and Settings\tempuser\My Documents\EMAILS\" + subject, ForAppending, True)
ts.Write (oMail.Body)
ts.Close
Set ts = Nothing
Set FSO = Nothing
Set oMail = Nothing
Set olNS = Nothing

结束子

于 2011-10-27T16:37:56.140 回答