Domanda

Ho scritto un'app VBA che apre una cartella in Outlook e quindi scorre i messaggi. Devo scrivere i corpi dei messaggi (con qualche modifica) in un singolo file flat. Il mio codice è il seguente ...

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 parte in questione è " ProcessMailItem " ;. Dato che non mi preoccupo eccessivamente delle prestazioni in questa fase, quindi l'inefficiente "apri, aggiungi, chiudi" la metodologia dei file va bene per questo esempio.

So che potrei passare un po 'di tempo a cercare la risposta con Google, ma ho controllato prima qui e non c'erano buone risposte per questo. Essendo un fan di Stackoverflow, spero che metterlo qui aiuti i futuri sviluppatori a cercare risposte. Grazie per la tua pazienza.

È stato utile?

Soluzione

Puoi cavartela scrivendo su un file senza usare alcun oggetto, semplicemente usando gli strumenti di file VBA integrati:

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

Altri suggerimenti

Se non ti dispiace riaprire il file di output ogni volta che aggiungi del testo, allora dovrebbe funzionare.

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

Dovrai anche aggiungere un riferimento alla libreria Microsoft Scripting Runtime. Questo contiene FileSystemObject.

Devi anche occuparti del popup di sicurezza "cercando di accedere agli indirizzi email" che è trattato in Outlook "quot Object Model Guard"; Problemi di sicurezza per gli sviluppatori

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top