2008-12-30 1 views
5

Ich habe eine VBA-App geschrieben, die einen Ordner in Outlook öffnet und dann durch die Nachrichten iteriert. Ich muss die Nachrichtentexte (mit einigen Feinabstimmungen) in eine einzige flache Datei schreiben. Mein Code ist wie folgt ...Schreiben von E-Mail-Nachrichten in flache Dateien in Outlook mit 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 

Der fragliche Teil ist "ProcessMailItem". Da ich mich in diesem Stadium nicht allzu sehr mit der Performance beschäftige, ist die sehr ineffiziente Methode "Öffnen, Anhängen, Schließen" für dieses Beispiel in Ordnung.

Ich weiß, dass ich einige Zeit damit verbringen könnte, die Antwort mit Google nachzuschlagen, aber ich habe hier zuerst nachgesehen und es gab keine guten Antworten dafür. Ich bin ein Fan von Stackoverflow. Ich hoffe, dass das hier helfen wird, zukünftigen Entwicklern auf der Suche nach Antworten zu helfen. Danke für Ihre Geduld.

Antwort

6

können Sie weg in eine Datei mit dem Schreiben, ohne Objekte zu verwenden, nur die eingebauten VBA-Datei-Tools:

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

bedeckt wählte ich diese Antwort, weil es sehr VBA centric ist. Eric Ness 'Antwort ist auch gültig !! – Craig

4

Wenn es Ihnen nichts ausmacht, die Ausgabedatei jedes Mal erneut zu öffnen, wenn Sie Text anhängen, sollte das funktionieren.

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 

Sie müssen auch einen Verweis auf die Microsoft Scripting Runtime-Bibliothek hinzufügen. Darin ist FileSystemObject enthalten.

1

Sie müssen auch Sorge für die Sicherheit Pop-up nehmen „versuchen, E-Mail-Adressen zuzugreifen ", die in 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

Es gibt immer noch ein Problem mit dem Pfad in der OpenTextFile. Ich bekomme keine konsistenten Ergebnisse zu diesem Pfad im Vergleich zu einem kürzeren Pfad ohne Leerzeichen. – jim

Verwandte Themen