2008-12-30 17 views
5

Tôi đã viết một ứng dụng VBA mở thư mục trong triển vọng và sau đó lặp qua các thư. Tôi cần phải viết các nội dung thông điệp (với một số tinh chỉnh) vào một tệp phẳng duy nhất. Mã của tôi như sau ...Soạn tin nhắn email cho các tệp phẳng trong Outlook với VBA

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 

Phần được đề cập là "ProcessMailItem". Vì tôi không quá quan tâm đến hiệu suất ở giai đoạn này nên phương pháp tệp "mở, chắp thêm, đóng" rất không hiệu quả là tốt cho ví dụ này.

Tôi biết tôi có thể dành chút thời gian tìm kiếm câu trả lời với google nhưng tôi đã kiểm tra ở đây trước tiên và không có câu trả lời hay cho việc này. Là một fan hâm mộ của Stackoverflow Tôi hy vọng rằng việc này sẽ giúp các nhà phát triển trong tương lai tìm kiếm câu trả lời. Cảm ơn sự kiên nhẫn của bạn.

Trả lời

6

Bạn có thể nhận được ngay với văn bản cho một tập tin mà không cần sử dụng bất kỳ đối tượng, chỉ sử dụng được xây dựng trong VBA công cụ file:

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

tôi đã chọn câu trả lời này bởi vì nó là rất VBA trung tâm. Câu trả lời của Eric Ness cũng hợp lệ !! – Craig

4

Nếu bạn không nhớ mở lại tệp đầu ra mỗi khi bạn thêm một số văn bản, thì điều này sẽ hoạt động.

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 

Bạn cũng sẽ cần thêm tham chiếu vào thư viện Microsoft Scripting Runtime. Điều này có FileSystemObject trong đó.

1

Bạn cũng phải chăm sóc của an ninh cửa sổ bật lên "cố gắng truy cập vào địa chỉ email "được đề cập trong 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 

End Sub

+0

vẫn còn một số vấn đề với đường dẫn trong OpenTextFile. tôi không nhận được kết quả phù hợp với con đường đó so với một con đường ngắn hơn không có khoảng trắng. – jim