Zum Inhalt springen

VBA: Outlook-Mail-Export


freeman_sb

Empfohlene Beiträge

Hallo Leute,

folgendes Problem aus dem ich einfach nicht schlau werde.

Ich habe ein Makro geschrieben, das je nach Useraktion zwei unterschiedliche Funktionen ausführt. Es werden aber in jedem Fall Mails aus dem Posteingang in Outlook in ein Verzeichnis exportiert.

Das Programm funktioniert soweit einwandfrei, jedoch überspringt es ohne ersichtlichen Grund immer wieder Nachrichten im Posteingang und exportiert diese nicht. Ich habe schon getestet, getan und gemacht was ich nur konnte. Es ist einfach nur völlig irrational!

Jemand eine Idee? Der Fokus sollte auf den for - each - Schleifen liegen...

'------------------------------------------------------------------------------------------------------------------------

'Programm ermöglicht das Exportieren von Nachrichten in das Dateisystem

'hierzu werden die Nachrichten im Posteingang auf den Absender und Betreff überprüft

'es sind zwei unterschiedliche Exportmethoden möglich - eine vordefinierte für den Absender ************, dass

'** Zielverzeichnisse berücksichtigt - je nach Betreffzeile

'oder die Methode, welche Nachrichten auf Absender überprüft und diese in ein eingegebenes Verzeichnis exportiert und löscht

'hierzu muss der User in einem Formular Absender und Zielverzeichnis eingeben.


'Erstellt von: ********** Fachinformatiker Anwendungsentwicklung (FIAE)

'Stand: 19.06.2007


Option Explicit


'benötigte globale Konstante(n)

'------------------------------------------------------------------------------------------------------------------------

Const fill As String = "_"

'------------------------------------------------------------------------------------------------------------------------


Public WithEvents myOlItems As Outlook.Items


Public Sub Initialize_handler()


    Set myOlItems = Outlook.Application.GetNamespace("MAPI").GetDefaultFolder(5).Items


End Sub


'Startoption des Codes festlegen. Bei Wunsch bitte anpassen!-------------------------------------------------------------


'Programmstart bei Eingang jeder neuen Nachricht

'Private Sub Application_NewMail()


'Programmstart beim Starten des Email - Clients Outlook.exe

Private Sub Application_Startup()


'Programmstart beim Beenden von Outlook

'Private Sub Application_Quit()


'Konfigurationsbereich -hier können Anpassungen vorgenommen werden-

'------------------------------------------------------------------------------------------------------------------------

'String für Absenderadresse

Dim Absender As String

'String(s) für (die) Zielordner

Dim DestinationFolderTest As String

Dim DestinationFolder1 As String

Dim DestinationFolder2 As String

Dim DestinationFolder3 As String

Dim DestinationFolder4 As String

'------------------------------------------------------------------------------------------------------------------------


'Variablendeklaration

'------------------------------------------------------------------------------------------------------------------------

Dim OApplication As Application

Dim Folder As MAPIFolder

Dim Folder2 As MAPIFolder

Dim Message As Object

Dim DestinationFolder As String

Dim MessageSubject As String

Dim pos1 As Integer

Dim pos2 As Integer

Dim List As Variant

Dim StrTemp As String

Dim decision1 As String

Dim decision2 As String

Dim counter As Integer

Dim error As Integer

Dim Verzeichnis As String

'------------------------------------------------------------------------------------------------------------------------


'Variableninitialisierung

'------------------------------------------------------------------------------------------------------------------------

Set OApplication = CreateObject("Outlook.Application")

'Folder wird auf Posteingang gesetzt

Set Folder = OApplication.Session.GetDefaultFolder(olFolderInbox)

'Debug.Print (Folder)

'Debug.Print (OApplication.GetNamespace("Mapi").GetDefaultFolder(olFolderInbox))

Set Folder = OApplication.Session.GetDefaultFolder(olFolderInbox)




'Festlegung der Zielverzeichnisse -- Reihenfolge nicht verändern! -- Anpassung hier vornehmen

'-------------------------------------------------------------------------------


DestinationFolder1 = "M:\Daten\testing\"

DestinationFolder2 = "M:\Daten\testing\"

DestinationFolder3 = "M:\Daten\testing\"

DestinationFolder4 = "M:\Daten\testing\"


'-------------------------------------------------------------------------------

pos1 = 0

pos2 = 0

counter = 0

'------------------------------------------------------------------------------------------------------------------------

'Userabfrage ob die Nachrichten jetzt exportiert und aus dem Posteingang gelöscht werden sollen

decision1 = MsgBox("Möchten sie nun Nachrichten von '******' in die Verzeichnisse exportieren und aus dem Posteingang löschen?", vbYesNo, "Nachrichten exportieren?")

If decision1 = vbYes Then

'Programmbeginn

'Jede Nachricht im globalen Posteingang wird auf den Absendernamen überprüft

'For Each Folder2 In Folder.Folders

For Each Message In Folder.Items

    'handelt es sich auch um ein MailItem - Objekt?

    If TypeOf Message Is MailItem Then

    If (Message.SenderName = "******") Then

        counter = counter + 1

        StrTemp = Message.Subject

        'Auswertung von StrTemp und schreiben der Dateien

        If StrTemp Like "***********************" Then

            MessageSubject = FileName(Message.Subject)

            Message.SaveAs (DestinationFolder1 & MessageSubject & ".txt"), olTXT

        ElseIf StrTemp Like "*******************" Then

            MessageSubject = FileName(Message.Subject)

            Message.SaveAs (DestinationFolder2 & MessageSubject & ".txt"), olTXT

        ElseIf StrTemp Like "*******************" Then

            MessageSubject = FileName(Message.Subject)

            Message.SaveAs (DestinationFolder3 & MessageSubject & ".txt"), olTXT

        ElseIf StrTemp Like "*******************" Then

            MessageSubject = FileName(Message.Subject)

            Message.SaveAs (DestinationFolder4 & MessageSubject & ".txt"), olTXT

	'usw.

	Else

        error = error + 1

        End If

        'Löschen der Nachricht

        Message.Delete

        StrTemp = ""

    End If

    'pos1 = 0

    'pos2 = 0

    StrTemp = ""

    End If

Next

'Next

'Message Box mit der Anzahl der exportierten Nachrichten anzeigen


If counter > 1 Then

    MsgBox "Es wurden " & counter & " Nachrichten gefunden, exportiert und aus dem Posteingang entfernt", vbInformation

ElseIf counter = 1 Then

    MsgBox "Es wurde " & counter & " Nachricht gefunden, exportiert und aus dem Posteingang entfernt", vbInformation

ElseIf counter = 0 Then

    MsgBox "Es wurden keine Nachrichten des Absenders '**********' im Posteingang gefunden", vbInformation

End If

'Sollten Fehler aufgetreten sein werden diese hier ausgegeben

If error <> 0 Then

    MsgBox ("Bei " & error & " Nachricht(en) konnte die Betreffzeile nicht ausgewertet werden, da diese unbekannt ist. Bitte im Quellcode korrigieren und gelöschte Nachrichten mit exportieren Nachrichten vergleichen und ggf. wieder herstellen."), vbInformation

End If

'Ressourcen freigeben

Set Message = Nothing

Set Folder = Nothing

Set OApplication = Nothing

counter = 0

error = 0

Else

'Exportierne anderer Nachrichten ermöglichen

decision2 = MsgBox("Möchten sie Nachrichten eines anderen Absenders in ein Verzeichnis exportieren?", vbYesNo, "Nachrichten exportieren?")

If decision2 = vbYes Then

UserForm1.Show

'Idle solange bis der OK Button des Formulares betätigt wurde

Do While UserForm1.ActiveControl = True

'Idle-Prozess

Loop

Absender = UserForm1.TextBox1.Value

Verzeichnis = UserForm1.TextBox2.Value & "\"

'Debug.Print (Absender)

'Debug.Print (Verzeichnis)

'Programmbeginn

'Jede Nachricht im globalen Posteingang wird auf den Absendernamen überprüft

'For Each Folder2 In Folder.Folders

For Each Message In Folder.Items

'Überprüfung ob es sich tatsächlich auch um ein MailItem - Objekt handelt

'Debug.Print TypeName(Message)

If TypeOf Message Is MailItem Then

    If (Message.SenderName = Absender) Then

        counter = counter + 1

        'Debug.Print (Absender)

        MessageSubject = FileName(Message.Subject)

        Message.SaveAs (Verzeichnis & " - " & Absender & " - " & " " & MessageSubject & ".txt"), olTXT

        'Nachricht löschen

        Message.Delete

    End If

Else

End If

Next

'Next

'UserForm zurücksetzen

UserForm1.TextBox1.Value = "Absender so eingeben wie im Posteingang angezeigt!"

UserForm1.TextBox2.Value = "M:\Daten"

'Ausgabe für User generieren

If counter = 0 Then

    MsgBox ("Es wurden keine Nachrichten vom Absender '" & Absender & "' im Posteingang gefunden."), vbInformation

ElseIf counter = 1 Then

    MsgBox ("Es wurde eine Nachrichten vom Absender '" & Absender & "' im Posteingang gefunden, exportiert und gelöscht."), vbInformation

Else

    MsgBox ("Es wurden " & counter & " Nachrichten vom Absender '" & Absender & "' im Posteingang gefunden, exportiert und gelöscht."), vbInformation

End If

ElseIf decision2 = vbNo Then

End If

counter = 0

End If

End Sub


'Mit dieser Funktion wird ein "erlaubter Dateiname generiert um die Nachrichten abspeichern zu können"

Private Function FileName(IncomingString As String) As String

Dim Temp As String

    Temp = IncomingString

    Temp = Replace(Temp, "/", fill)

    Temp = Replace(Temp, "\", fill)

    Temp = Replace(Temp, "*", fill)

    Temp = Replace(Temp, "?", fill)

    Temp = Replace(Temp, """", fill)

    Temp = Replace(Temp, "<", fill)

    Temp = Replace(Temp, ">", fill)

    Temp = Replace(Temp, "|", fill)

    Temp = Replace(Temp, ":", fill)


    FileName = Temp

End Function


Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...