Pergunta

Escrevi um aplicativo VBA que abre uma pasta no Outlook e depois itera através das mensagens. Preciso escrever os corpos de mensagem (com alguns ajustes) em um único arquivo plano. Meu código é o seguinte ...

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

A parte em questão é "ProcessmailItem". Como não estou muito preocupado com o desempenho nesta fase, a metodologia de arquivo "aberta, anexada, feche" muito ineficaz é boa para este exemplo.

Sei que poderia passar algum tempo procurando a resposta com o Google, mas verifiquei aqui primeiro e não houve boas respostas para isso. Ser fã do StackOverflow, espero que colocar isso aqui ajude futuros desenvolvedores a procurar respostas. Obrigado pela sua paciência.

Foi útil?

Solução

Você pode se safar de escrever em um arquivo sem usar objetos, apenas usando as ferramentas de arquivo VBA embutidas:

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

Outras dicas

Se você não se importa de reabrir o arquivo de saída cada vez que anexar algum texto, isso deve funcionar.

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

Você também precisará adicionar uma referência à biblioteca de tempo de execução do Microsoft Script. Isso possui o FileSystemObject.

Você também precisa cuidar do pop -up de segurança "tentando acessar endereços de e -mail", que é coberto em Outlook "Modelo de Objeto Guard" Questões de segurança para desenvolvedores

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

Final sub

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top