VBA-Excel - per VBA per Excelmakro in Outlook Mails in einen Unterordner verschieben
Hallo,
habe ein kleines Problem das mich groß beschäftigt.
Windows: 10
MS-Office Version: 15.xxx
Aufgabenlösung:
Viele Mails mit einem bestimmten Anhang landen in einem bestimmten Ordner.
Der Anhang aller Mails wird in ein PC-Verzeichnis gespeichert und anschließend sollen alle Mails in ein Unterverzeichnis "erledigt" verschoben werden.
Der erste Teil "angehängte Dateien abspeichern" funktioniert . OK
Der zweite Teil "alle Mails zu verschieben" funktioniert leider nur teilweise.
Bei 3 Mails werden nur 2 verschoben
Bei 5 Mails werden nur 3 verschoben
Bei 10 Mails werden nur 5 verschoben
Die Schleife zur Mailverschiebung befindet sich am Ende des Programmes. Wenn ich die Anzahl der Mails mit COUNT abfrage, wird die komplette Anzahl ausgegeben. Die verschobenen Emails landen im korrekten Ordner.
Warum werden in der Schleife nicht alle Mails aus dem Quellordner verschoben?
Grüße
Armin
habe ein kleines Problem das mich groß beschäftigt.
Windows: 10
MS-Office Version: 15.xxx
Aufgabenlösung:
Viele Mails mit einem bestimmten Anhang landen in einem bestimmten Ordner.
Der Anhang aller Mails wird in ein PC-Verzeichnis gespeichert und anschließend sollen alle Mails in ein Unterverzeichnis "erledigt" verschoben werden.
Der erste Teil "angehängte Dateien abspeichern" funktioniert . OK
Der zweite Teil "alle Mails zu verschieben" funktioniert leider nur teilweise.
Bei 3 Mails werden nur 2 verschoben
Bei 5 Mails werden nur 3 verschoben
Bei 10 Mails werden nur 5 verschoben
Sub MailAnlagenSpeichern()
On Error GoTo Fehler_Outlook_Datenübernahme
Dim fMails As Object, eMail As Object, objOL As Object
Dim fErledigt As Object, Outlook_O As String, Outlook_UO As String
Dim Anzahl_Email As Integer, Anzahl_Anhang As Integer
Dim index_Email As Integer, index_Anhang As Integer
Dim Dateipfad As String, Zähler_Anhang As Integer
Zähler_Anhang = 1
' Outlook Object erzeugen
Set objOL = CreateObject("Outlook.Application")
' Outlook-Ordner und Unterordner aus der Exceldatei auslesen
Outlook_O = Worksheets("Einstellungen").Cells(2, 3).Value
Outlook_UO = Worksheets("Einstellungen").Cells(2, 4).Value
'Dateiverzeichnis
Dateipfad = Worksheets("Einstellungen").Cells(2, 5).Value
' prüfen wer das Programm ausführt. Information steht in "Blatt: Einstellungen Feld: A2" und die dazugehörige EMail-Adresse feststellen.
email_nr = Worksheets("Einstellungen").Cells(2, 1).Value
email_adresse = Worksheets("Einstellungen").Cells(4 + email_nr, 2).Value
'Ordner in Outlook referenzieren. EMail-Account muss passen und der EMailordner "0_Alerts" muss existieren. Inkl. dem Unterordner "erledigt"
Set fMails = objOL.Session.stores.Item(email_adresse).GetRootFolder.Folders.Item(Outlook_O)
'Set objFolder = objOL.GetNamespace("MAPI").GetRootFolder.Folders.Item(Outlook_O)
' Unterordner referenzieren in den die Mails verschoben werden wenn sie bearbeitet wurden. Muss existieren
Set fErledigt = fMails.Folders(Outlook_UO)
'Das ist die Anzahl von emails im Ordner
Anzahl_Email = fMails.Items.Count
MsgBox "Anzahl EMails: " & Anzahl_Email
'zählen der emails
If fMails.Items.Count > 0 Then
For index_Email = 1 To Anzahl_Email 'Alle emails im Posteingang werden durchlaufen
Application.StatusBar = "Lese Posteingang " & _
Format(index_Email / Anzahl_Email, "0%") 'In der Statuszeile wird einiges angezeigt
With fMails.Items(index_Email) 'Durch diese WITH-Schleife kann die Nennung des Objekts
'bei den nächsten Befehlen entfallen
If .Attachments.Count > 0 Then ' Anhänge abspeichern
For index_Anhang = 1 To .Attachments.Count
Debug.Print strPath & .Attachments.Item(index_Anhang).Filename 'Ausgabe im Direktfenster! (Strg+G)
.Attachments.Item(index_Anhang).SaveAsFile Dateipfad & Format(Now, "YYMMDD_HHMM") & "_" & Zähler_Anhang & "_" & .Attachments.Item(index_Anhang).Filename
Next
End If
End With
Zähler_Anhang = Zähler_Anhang + 1 ' dient zur Namensgebung des Anhanges
Next
'Verschieben der Mail in den "erledigt" Ordner
For Each eMail In fMails.Items
eMail.Move fErledigt
i = fMails.Items.Count 'nur zum Test eingebaut
Next
Else
MsgBox "Keine Mails zum Bearbeiten im Outlook-Ordner: " & Outlook_O, vbExclamation
End If
Set objOL = Nothing
Set eMail = Nothing
'nur behandeln wenn Fehler, ansonsten keine MsgBox
Exit Sub
Fehler_Outlook_Datenübernahme:
MsgBox ("Es ist ein Fehler im Programm aufgetreten! Bitte an den Entwickler wenden!" & vbCrLf & vbCrLf & "Fehlernummer: " & Err.Number & _
vbCrLf & "Fehlerbeschreibung: " & Err.Description)
End Sub
Die Schleife zur Mailverschiebung befindet sich am Ende des Programmes. Wenn ich die Anzahl der Mails mit COUNT abfrage, wird die komplette Anzahl ausgegeben. Die verschobenen Emails landen im korrekten Ordner.
Warum werden in der Schleife nicht alle Mails aus dem Quellordner verschoben?
Grüße
Armin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 542849
Url: https://administrator.de/forum/vba-excel-per-vba-per-excelmakro-in-outlook-mails-in-einen-unterordner-verschieben-542849.html
Ausgedruckt am: 28.04.2025 um 01:04 Uhr
1 Kommentar

Warum werden in der Schleife nicht alle Mails aus dem Quellordner verschoben?
Weil du mit dem Verschieben der Mails die Collection (fMails.Items) über die du mit der Foreach Schleife iterierst gleichzeitig veränderst While fMails.Items.Count > 0
fMails.Items(1).Move fErledigt
Wend