Frage

Ich habe einen VBA-App geschrieben, die einen Ordner in Outlook öffnet und durchlaufen dann die Nachrichten. Ich brauche die Nachrichtenkörper (mit einigen Optimierungen) zu einer einzigen flachen Datei zu schreiben. Mein Code ist wie folgt ...

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 betreffende Teil ist „ProcessMailItem“. Als ich mit der Leistung in diesem Stadium nicht allzu besorgt bin so die sehr ineffiziente „offen, hängt, in der Nähe“ Datei Methodik ist für dieses Beispiel in Ordnung.

Ich weiß, ich könnte einige Zeit damit verbringen, die Antwort mit Google suchen, aber ich überprüfte zuerst hier und es gab keine gute Antworten für diese. Als ein Fan von Stackoverflow Ich hoffe, dass dies hier das Aufstellen wird die Suche nach Antworten zukünftige Entwicklern helfen. Vielen Dank für Ihre Geduld.

War es hilfreich?

Lösung

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

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

Andere Tipps

Wenn Sie nicht dagegen, erneutes Öffnen der Ausgabedatei jedes Mal, wenn Sie einen Text anzuhängen, dann sollte diese Arbeit.

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 finden auch einen Verweis auf die Microsoft Scripting Runtime-Bibliothek hinzufügen müssen. Dies hat Filesystem drin.

Sie müssen auch den Sicherheits-Popup kümmern „versuchen, E-Mail-Adressen zuzugreifen“, die in Outlook "Object Model Guard" Sicherheitsprobleme für Entwickler

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top