我编写了一个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的粉丝,我希望将其放在这里将有助于未来的开发人员寻找答案。谢谢你的耐心等待。

有帮助吗?

解决方案

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

Open "C:\file.txt" for append as 1
Print #1, SomeStringVar
Close #1

其他提示

如果你不介意每次附加一些文本时重新打开输出文件,那么这应该有效。

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。

您还必须处理安全弹出窗口“尝试访问电子邮件地址”。 Outlook" Object Model Guard"开发人员的安全问题

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

End Sub

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top