使用VBA将电子邮件信息写入Outlook中的平面文件
我已经编写了一个VBA应用程序,它在Outlook中打开一个文件夹,然后遍历消息。我需要将消息体(通过一些调整)写入单个平面文件。我的代码如下...使用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脚本运行时库的引用。这里有FileSystemObject。
你也必须采取安全弹出的关怀“试图访问电子邮件地址“这是覆盖在Outlook "Object Model Guard" Security Issues for Developers
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
末次
OpenTextFile中的路径仍然存在一些问题。我没有得到一致的结果,该路径与较短的路径没有空格。 – jim 2011-11-03 15:47:42
我选择了这个答案,因为它是非常VBA中心。埃里克内斯的答案也是有效的! – Craig 2008-12-30 21:27:04