Question

J'ai écrit une application VBA qui ouvre un dossier dans Outlook, puis effectue une itération dans les messages. J'ai besoin d'écrire les corps du message (avec quelques ajustements) dans un seul fichier plat. Mon code est le suivant ...

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

La partie en question est "ProcessMailItem". Comme je ne suis pas trop préoccupé par les performances à ce stade, le très inefficent "ouvrir, ajouter, fermer" la méthodologie de fichier convient à cet exemple.

Je sais que je pourrais passer un peu de temps à chercher la réponse avec Google, mais j’ai vérifié ici en premier et il n’y avait pas de bonne réponse à cela. En tant que fan de Stackoverflow, j'espère que cette option aidera les futurs développeurs à trouver des réponses. Merci de votre patience.

Était-ce utile?

La solution

Vous pouvez vous échapper en écrivant dans un fichier sans utiliser d'objet, en utilisant simplement les outils de fichier VBA intégrés:

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

Autres conseils

Si cela ne vous dérange pas de rouvrir le fichier de sortie chaque fois que vous ajoutez du texte, cela devrait fonctionner.

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

Vous devrez également ajouter une référence à la bibliothèque Microsoft Scripting Runtime. Cela contient FileSystemObject.

Vous devez également vous occuper de la fenêtre de sécurité "Essayer d'accéder aux adresses électroniques". Ce sujet est couvert dans le Outlook & "Garde du modèle d'objet". Problèmes de sécurité pour les développeurs

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top