VBA Outlook: E-Mail mit Makro automatisch in anderen Ordner verschieben

VBA - Visual Basic for Application

Um die Arbeit mit vielen Mails zu vereinfachen und zu beschleunigen, empfiehlt es sich ein paar Automatismen einzufügen. So der Fall, wenn man z.B. sehr viele Mails bekommt von einem bestimmten Typ, die man automatisch einen bestimmten Unterordner zuweisen möchte.
Beispiel 1: Man bekommt von seinem Online-Shop viele E-Mails mit Bestelleingängen und die sollen in einen Ordner “Bestellungen” automatisch verschoben werden.
Beispiel 2: Man möchte einfach bestimmte ausgewählte E-Mails mit einem Klick vom Posteingang in einen Archiv-Ordner verschieben.

Dazu kann man natürlich auch die in Outlook eingebauten Funktionen zum Erstellen von automatischen Regeln verwenden. Wo man die findet, zeigt der nachfolgende Screenshot.

Screenshot von Outlook, wie man eine Regel erstellt
Regel zum Verschieben einer E-Mail in einen Unterordner erstellen

Jedoch gibt es sicherlich auch Anwendungsfälle, wo dies nicht ganz das passende Mittel der ersten Wahl ist, z.B. wenn man mit einem Klick alle markierten E-Mails in einen bestimmten Unterordner verbannen will. Oder wenn man bereits eine anderes VBA-Makro hat, z.B. zum automatischen Beantworten einer E-Mail, und man im selben Makro die Ursprungs-Mail als gelesen markieren möchte und danach aus dem Posteingang woanders hin verschieben möchte.

VBA-Code: E-Mail in Unterordner verschieben

Der nachfolgende Screenshot und das Code-Beispiel zeigen, wie man eine oder mehrere ausgewählte E-Mails in einen Unterordner des Posteingangs verschieben kann.

VBA-Editor-Screenshot des VBA-Codes, um eine E-Mail in einen Unterordner oder Archivordner zu verschieben.
VBA-Code: E-Mail in Unterordner verschieben

Bei diesem Code-Beispiel werden alle im Outlook ausgewählten E-Mails in der For Each-Schleife durchlaufen und dann einen festgelegten Ordner (“All Mails”), welcher ein Unterordner des Posteingangs ist, verschoben.

Public Sub MoveMail()
    Dim olItem As Outlook.MailItem
    Dim objNS As Outlook.NameSpace
    Dim objFolder As Outlook.MAPIFolder
    Dim destFolder As Outlook.Folder
    
    'Definieren Sie den Zielordner; in diesem Fall ist es "All Mails", ein Unterordner des "Posteingang".
    Set objNS = GetNamespace("MAPI")
    Set objFolder = objNS.Folders.GetFirst ' Ordner des aktuellen Postfachs
    Set objFolder = objFolder.Folders("Posteingang")
    Set destFolder = objFolder.Folders("All Mails")
    
    'Alle ausgewählten E-Mails in den definierten Unterordner verschieben
    For Each olItem In Application.ActiveExplorer.Selection
        olItem.Move destFolder
    Next olItem
End Sub

Um das Objekt für den Unterordner zu erhalten muss man erstmal den Mapi-Namespace festlegen (GetNamespace(“MAPI”)). Dort ermittelt man mit objNS.Folders.GetFirst das betreffende Postfach. Wir verwenden hier GetFirst, weil das betreffende Postfach an erster Stelle im Outlook steht. Hat man mehrere Postfächer kann man zu diesen entweder mit GetNext navigieren oder diese direkt ansprechen über den Index mittels .Item(number).

Anschließend definiert man noch den Posteingang als Folder um dann auf dessen Folder-Array zuzugreifen, um den passenden Unterordner vom Posteingang zu definieren. Dieser ist dann der Zielordner, wo die ausgewählten E-Mails hin verschoben werden sollen.

Bitte beachten, dass für das Funktionieren des Codes verschiedene Referenzen unter Verweise aktiviert sein müssen.

Screenshot der notwendigen Verweise im VBA-Editor
erforderliche Verweise unter Extras

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert