2008-12-30 13 views
5

Napisałem aplikację VBA, która otwiera folder w programie Outlook, a następnie przechodzi przez wiadomości. Muszę napisać treść wiadomości (z pewnymi poprawkami) do jednego płaskiego pliku. Mój kod jest następujący:Pisanie wiadomości e-mail do plików płaskich w programie Outlook z 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 

Część, o której mowa, to "ProcessMailItem". Ponieważ nie jestem zbytnio zainteresowany wydajnością na tym etapie, bardzo nieefektywna metoda "otwierania, dołączania, zamykania" plików jest w porządku dla tego przykładu.

Wiem, że mogłem poświęcić trochę czasu na szukanie odpowiedzi za pomocą google, ale najpierw sprawdziłem i nie było na to dobrych odpowiedzi. Będąc fanem Stackoverflow mam nadzieję, że umieszczenie tego tutaj pomoże przyszłym programistom szukającym odpowiedzi. Dziękuję za cierpliwość.

Odpowiedz

6

Można uciec z pisania do pliku bez użycia żadnych przedmiotów, tylko za pomocą wbudowanego w VBA narzędzia plików:

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

wybrałem tę odpowiedź, ponieważ jest bardzo VBA centric. Odpowiedź Erica Nessa jest również ważna !! – Craig

4

Jeśli nie masz nic przeciwko ponownemu otwieraniu pliku wyjściowego za każdym razem, gdy dodasz jakiś tekst, powinno to zadziałać.

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 

Należy również dodać odniesienie do biblioteki Microsoft Scripting Runtime. Ma to obiekt FileSystemObject.

1

Trzeba również zadbać o popup bezpieczeństwa „próbuje uzyskać dostęp do adresów e-mail ", która jest pokryta 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

nadal istnieje problem ze ścieżką w pliku OpenTextFile. Nie uzyskuję spójnych wyników na tej ścieżce w porównaniu do krótszej ścieżki bez spacji. – jim

Powiązane problemy