Outlook-Mails per Tastenkombination verschieben

Nicht alle eingehenden E-Mails, die man erhält, müssen beantwortet werden. Beispiele sind Bestellbestätigungen, Rechnungen et cetera. Diese wollen Sie aber vielleicht aus dem Posteingangs-Ordner in einen anderen Ordner verschieben, der beispielsweise nur E-Mails enthält, die mit Bestellungen zu tun haben. Das gelingt per Drag and Drop relativ schnell. Noch besser wäre aber eine Tastenkombination, mit der wir die Mails in die Zielordner verschieben könnten. Dann brauchen Sie beim Durchgehen des Posteingangs die Hände gar nicht mehr von der Tastatur zu nehmen. Die hier vorgestellte Lösung berührt zwar nicht die Datenbankanwendung Microsoft Access, um die es eigentlich in diesem Magazin geht, aber diese Lösung für effizienteres Arbeiten wollen wir Ihnen nicht vorenthalten.

Es gibt sicher Menschen, für die es in Bezug auf die E-Mails im Posteingang von Outlook nur zwei Möglichkeiten gibt: Beantworten und löschen oder direkt löschen. Die meisten müssen aber vielleicht geschäftliche und andere E-Mails aufbewahren oder machen das einfach aus praktischen Gründen. Zum Beispiel ist es sinnvoll, alle E-Mails, die mit Onlinebestellungen zusammenhängen, aufzubewahren.

Dazu bietet es sich unter Outlook an, weitere Ordner unterhalb des Ordners Posteingang anzulegen und diesen Bezeichnungen wie beispielsweise Bestellungen zu geben (siehe Bild 1). E-Mails, die sich im Posteingang befinden und die mit Bestellungen in Zusammenhang stehen, können Sie dann mit der Maus per Drag and Drop in diesen Ordner verschieben.

Bestellungen-Ordner in Outlook

Bild 1: Bestellungen-Ordner in Outlook

Wenn Sie jedoch viele solcher E-Mails bekommen, die Sie schnell einem bestimmten Ordner unterhalb des Posteingang-Ordners zuweisen wollen, wird das ewige Drag and Drop schnell anstrengend.

E-Mails verschieben per Tastenkombination

Also haben wir uns überlegt, wie wir solche Arbeitsschritte vereinfachen können. Die naheliegendste Idee ist der Einsatz einer Tastenkombination, mit der wir eine von uns für diesen Zweck angelegte VBA-Prozedur aufrufen wollen. Die Idee mit der VBA-Prozedur können wir umsetzen, aber es gibt keine direkte Möglichkeit in Outlook, eine solche per Tastenkombination aufzurufen. Daher müssen wir einen kleinen Umweg gehen: Wir können VBA-Prozeduren nämlich mit benutzerdefinierten Schaltflächen im Ribbon aufrufen, und dieses kann mit einigen Einschränkungen per Tastenkombination gesteuert werden.

Wir werden in den nächsten Abschnitten zunächst die benötigten VBA-Prozeduren erstellen und dann die Ribbon-Einträge samt Tastenkombinationen hinzufügen.

Modul im VBA-Projekt von Outlook anlegen

Im Gegensatz zu Access, wo jede Datenbankdatei ein eigenes VBA-Projekt aufweist, gibt es für Outlook ein zentrales VBA-Projekt. Schließlich gibt es in Outlook keine zu öffnenden Dateien beziehungsweise Dokumente wie in den anderen Office-Anwendungen.

Den VBA-Editor mit diesem VBA-Projekt zeigen Sie von Outlook aus mit der Tastenkombination Alt + F11 an. Hier finden Sie standardmäßig nur den Ordner Microsoft Outlook Objekte mit der Klasse ThisOutlookSession. Um Prozeduren anzulegen, fügen wir über den Menüeintrag Einfügen|Modul ein neues Standardmodul hinzu und nennen dieses mdlMailsAndFolders. Dieses Modul wir dann im Ordner Module angezeigt.

E-Mail per VBA verschieben

Die geplante VBA-Prozedur soll alle zum Zeitpunkt des Aufrufs markierten Einträge des Posteingangs in den mit strFolder angegebenen Zielordner verschieben (siehe Listing 1).

Public Sub MoveToFolder(strTargetfolder As String)
     Dim objMailItem As MailItem
     Dim objExplorer As Explorer
     Dim objSelection As Selection
     Dim objTargetFolder As Folder
     Dim objCurrentFolder As Folder
     Dim objNamespace As NameSpace
     Dim i As Integer
     Set objExplorer = Application.ActiveExplorer
     Set objCurrentFolder = objExplorer.CurrentFolder
     If objCurrentFolder.Name = "Posteingang" Then
         Set objSelection = objExplorer.Selection
         Set objNamespace = Application.GetNamespace("MAPI")
         Set objTargetFolder = GetFolder(objNamespace, strTargetfolder)
         For i = 1 To objSelection.count
             Select Case TypeName(objSelection.Item(i))
                 Case "MailItem"
                     Set objMailItem = objSelection.Item(i)
                     objMailItem.Move objTargetFolder
             End Select
         Next i
     End If
End Sub

Listing 1: Verschieben der aktuell markierten E-Mails in den mit strFolder angegebenen Ordner

Dazu deklarieren wir verschiedene Variablen, die wir anschließend füllen. Als Erstes referenzieren wir mit der Variablen objExplorer das mit ActiveExplorer ermittelte Fenster zur Ansicht von Ordnerinhalten unter Outlook.

Dann weisen wir den Standardordner des Explorer-Objekts der Variablen objCurrentFolder zu und prüfen, ob der Name des Ordners Posteingang lautet. Wenn Sie eine englische Version von Office nutzen, müssen Sie diese Zeile gegebenenfalls noch anpassen. Hat der Ordner den Namen Posteingang, arbeitet die Prozedur die Anweisungen in der If…Then-Bedingung ab.

Hier referenzieren wir die ausgewählten Elemente mit der Variablen objSelection und den aktuellen MAPI-Namespace mit objNamespace. Leider kann man nicht direkt über den Namen auf Folder-Objekte zugreifen, die nicht in der ersten Ebene liegen (also unterhalb von Posteingang).

Deshalb benötigen wir eine Hilfsfunktion namens GetFolder, um den mit strTargetfolder angegebenen Ordner zu erhalten. Dieser Funktion, die wir weiter unten beschreiben, übergeben wir die Variablen objNamespace und strTargetfolder und erhalten ein Folder-Objekt mit dem Zielordner zurück.

Danach durchläuft die Prozedur in einer For…Next-Schleife über die Zahlen von 1 bis zur Anzahl der markierten Elemente alle betroffenen Einträge. Nach einer Prüfung, ob es sich bei dem jeweiligen Eintrag um eines mit dem Typ MailItem handelt, weisen wir dieses der Variablen objMailItem zu. Für dieses rufen wir dann die Methode Move auf und geben mit objTargetfolder den Zielordner für das Verschieben an.

Die Funktion GetFolder

Die Funktion aus Listing 2 erwartet die Angabe des zu verwendenden Namespace-Objekts sowie des Pfades zum zu ermittelten Ordner als Parameter.

Public Function GetFolder(objNamespace As NameSpace, strSubfolder As String) As Folder
     Dim objFolder As Folder
     Dim strFolders() As String
     Dim i As Integer
     If Left(strSubfolder, 2) = "" Then
         strSubfolder = Mid(strSubfolder, 3)
     End If
     strFolders = Split(strSubfolder, "\")
     Set objFolder = objNamespace.Folders(strFolders(0))
     If UBound(strFolders) - LBound(strFolders) > 0 Then
         For i = LBound(strFolders) + 1 To UBound(strFolders)
             Set objFolder = objFolder.Folders(strFolders(i))
         Next i
     End If
     Set GetFolder = objFolder
End Function

Listing 2: Ermitteln eines Folder-Objekts anhand des Pfades

Dieser Pfad lautet beispielsweise für den Ordner Posteingang wie folgt:

Outlook\Posteingang

Wenn Sie einen Ordner namens Bestellungen verwenden wollen, der sich direkt im Ordner Posteingang befindet, lautet der Pfad:

Outlook\Posteingang\Bestellungen

Nachfolgend wollen wir die einzelnen Elemente des Pfades in ein Array übertragen und dabei die Split-Funktion nutzen, um den Pfad an den Backslash-Zeichen aufzuspalten. Dazu müssen wir zunächst die eventuell vorn angegebenen beiden Backslash-Zeichen entfernen. Ob diese Zeichen angegeben wurden, prüfen wir mit einer ersten If…Then-Bedingung und entfernen diese gegebenenfalls.

Um beim obigen Beispiel zu bleiben, erhalten wir nun die folgende Zeichenkette:

Outlook\Posteingang\Bestellungen

Mit der Split-Anweisung fügen wir nun die durch das Backslash-Zeiten getrennten Teilzeichenketten in die Elemente eines Arrays namens strFolders.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar