Outlook-Mails per Tastenkombination verschieben

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

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.

Nun weisen wir der Variablen objFolder den Ordner zu, der den Namen des ersten Elements des Arrays enthält, in diesem Fall Outlook. Sofern das Array strFolders mehr als ein Element enthält, was der Fall ist, wenn die Differenz aus dem Index des letzten Elements und dem Index des ersten Elements größer als 0 ist, enthält der Pfad einen oder mehrere Ebenen mit Unterordnern.

Diese wollen wir nun durcharbeiten, bis wir am letzten angegebenen Ordner angelangt sind. Die dazu angelegte For…Next-Schleife durchlaufen wir vom zweiten bis zum letzten Element des Arrays.

Darin weisen wir der Variablen objFolder jeweils den Ordner zu, der den Namen aus strFolders(i) enthält und sich in dem zuvor mit objFolder referenzierten Ordner-Element befindet.

In unserem Beispiel referenzieren wir im ersten Durchlauf der Schleife das Element Posteingang mit der Variablen objFolder und im zweiten Durchlauf das Element Bestellungen.

Der nach dem Verlassen der Schleife in objFolder befindliche Ordner wird schließlich als Funktionsergebnis zurückgeliefert.

Prozedur MoveToFolder aufrufen

Solange wir noch keine Ribbon-Schaltflächen und damit auch noch keine Tastenkombination zu ihrem Aufruf angelegt haben, testen wir die Prozedur vom VBA-Editor aus.

Dazu können Sie, nachdem Sie eine zu verschiebende E-Mail im Posteingang markiert haben, einen Aufruf wie den folgenden im Direktbereich des VBA-Editors absetzen:

MoveToFolder "Outlook\Posteingang\Bestellungen"

Dadurch wird die aktuell markierte E-Mail in den angegebenen Zielordner verschoben. Sie können testweise auch einmal mehrere Elemente gleichzeitig markieren und auf diese Weise verschieben.

Startprozedur hinzufügen

Für den Aufruf über eine Ribbon-Schaltfläche eignen sich nur öffentlich deklarierte Prozeduren ohne Parameter. Also benötigen wir noch eine Wrapper-Prozedur, welche den Parameter für uns übergibt:

Public Sub MoveToFolder_Bestellungen()
     MoveToFolder "Outlook\Posteingang\Bestellungen"
End Sub

Warum bauen wir den Zielordner nicht direkt in die Prozedur MoveToFolder ein Weil Sie gegebenenfalls nicht nur einen Zielordner verwenden wollen, sondern vielleicht auch mehrere.

Dann brauchen Sie für jeden neuen Zielordner nur jeweils eine neue Wrapper-Prozedur hinzuzufügen.

Zielordner ermitteln

Wenn Sie den Pfad zum Zielordner zuverlässig ermitteln wollen, können Sie die folgende Anweisung vom Direktbereich des VBA-Editors aus aufrufen:

  Application.GetNamespace("MAPI").PickFolder.FolderPath

Dies zeigt den Dialog aus Bild 2 an, mit dem Sie den gewünschten Ordner auswählen können. Die Anweisung gibt den Pfad zum angegebenen Ordner im Direktbereich aus.

Auswahl eines Ordners

Bild 2: Auswahl eines Ordners

Prozedur per Ribbon aufrufen

Auf dem Weg, die Prozedur durch eine Tastenkombination aufrufbar zu machen, benötigen wir eine Ribbon-Schaltfläche. Hier gibt es zwei Möglichkeiten:

  • Wir fügen die Schaltfläche dem eigentlichen Ribbon hinzu, als in einer der Gruppen in den Tab-Elementen.
  • Oder wir legen die Ribbon-Schaltfläche in der Quick Access Toolbar an, das ist die Leiste mit den kleinen Befehlsschaltflächen über dem eigentlichen Ribbon.

Der Unterschied liegt im Wesentlichen in der Art, wie wir die Befehle per Tastenkombination aufrufen können. Für das eigentlichen Ribbon benötigen wir eine Kombination aus mehreren mit der Alt-Taste verwendeten Buchstaben. Wenn Sie die Alt-Taste betätigen, werden die direkt verfügbaren Elemente des Ribbons ja mit Buchstaben versehen, über die Sie diese Elemente aufrufen können. Für das Start-Ribbon sieht das wie in Bild 3 aus.

Aktivieren von Befehlen im Ribbon für den Zugriff mit der Tastatur

Bild 3: Aktivieren von Befehlen im Ribbon für den Zugriff mit der Tastatur

Wenn wir die zum Verschieben von E-Mails benötigte Schaltfläche in einer neuen, benutzerdefinierten Gruppe unterbringen möchten, müssen Sie sich also eine Tastenkombination aus der Alt-Taste und drei weiteren Buchstaben merken.

Etwas einfacher geht es, wenn wir die Quick Access Toolbar verwenden. Ihre Elemente sind standardmäßig über die Tastenkombinationen Alt + 1, Alt + 2 und so weiter aufrufbar.

Ribbon-Einträge hinzufügen

Unter Access fügen Sie Ribbon-Einträge für den Aufruf benutzerdefinierter VBA-Prozeduren auf recht komplizierte Weise hinzu, indem Sie die Definition des Ribbons in einer Tabelle namens USysRibbons speichern und dann noch das anzuzeigende Ribbon in den Access-Optionen auswählen.

Unter Outlook ist das etwas einfacher. Hier können Sie einfach mit dem Dialog zum Anpassen des Ribbons arbeiten. Diesen öffnen Sie, indem Sie auf die Schaltfläche rechts im Quick Access Toolbar klicken und den Eintrag Weitere Befehle… aus der nun erscheinenden Liste auswählen. Das öffnet den Dialog Outlook-Optionen und aktiviert direkt den Bereich Symbolleiste für den Schnellzugriff (siehe Bild 4).

Hinzufügen eines Makros zur Quick Access Toolbar

Bild 4: Hinzufügen eines Makros zur Quick Access Toolbar

Wählen Sie hier für das Auswahlfeld Befehle auswählen den Eintrag Makros aus, zeigt die linke Liste alle VBA-Prozeduren an, die öffentlich deklariert sind und die keine Parameter aufweisen.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar