Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Bild 1: Eine zum Weiterleiten vorbereitete E-Mail
Manchmal kommen E-Mails in Postfächern an, wo man diese nicht optimal weiterverarbeiten kann. Ein Beispiel sind E-Mails von Kunden, die Fragen zur Buchhaltung haben, aber ihre E-Mails an die allgemeine info@-Adresse geschickt haben. Dann können wir diese E-Mail zwar an die Buchhaltungs-Adresse weiterleiten, aber wenn die Buchhaltung dann auf diese E-Mail antworten soll, enthält diese bereits die beim Weiterleiten automatisch eingefügten Elemente – das wirkt auf den Kunden nicht besonders professionell. Oder wir haben eine der vielen “Software As A Service”-Anwendung, die ein eigenes Postfach haben, über das wir Informationen direkt dorthin schicken können. Ein Beispiel ist die Projektverwaltung Trello, der man E-Mails an eine spezielle E-Mail-Adresse zusenden kann, die dann dort automatisch als Aufgaben angelegt werden. In diesem Artikel zeigen wir, wie wir mit wenigen Anweisungen eine Kopie dieser E-Mail an eine weitere Adresse schicken können. Das erledigen wir zunächst durch den Aufruf einer VBA-Prozedur. Anschließend schauen wir uns an, wie wir das auch über die Benutzeroberfläche erledigen können.
Es gibt verschiedene Gründe, warum man eine E-Mail nicht an eine andere Adresse weiterleiten sollte, sondern diese so dorthin schicken möchte, dass man nicht erkennt, dass es sich um eine Weiterleitung handelt. Wenn wir nämlich die Weiterleiten-Schaltfläche für eine E-Mail betätigen, sehen wir nicht nur das Kürzel WG: im Betreff, sondern finden auch noch die Kopfdaten der ursprünglichen E-Mail über dem eigentlichen Inhalt der E-Mail (siehe Bild 1).
Bild 1: Eine zum Weiterleiten vorbereitete E-Mail
Wenn man selbst nicht der eigentliche Empfänger einer E-Mail ist und diese so an diesen weiterleiten möchte, dass er diese im Originalzustand erhält (abgesehen von der Empfängeradresse natürlich), gibt es in Outlook nur einen einzigen weg, der außerdem nicht durch einen entsprechenden VBA-Befehl abbildbar ist.
Um diesen Befehl aufzurufen, müssen wir die erneut zu sendende E-Mail zunächst in einem eigenen Inspektor-Fenster öffnen, beispielsweise per Doppelklick auf die E-Mail. Danach finden wir im Ribbon unter Nachricht|Verschieben|Weitere Verschiebeaktionen|Diese Nachricht erneut senden… den entsprechenden Befehl (siehe Bild 2).
Bild 2: Erneutes Senden einer E-Mail
Dies öffnet die E-Mail so, als ob wir diese gerade erstellt und mit Inhalt gefüllt haben und erlaubt es uns, den Empfänger anzupassen und die E-Mail erneut zu senden.
Funktionalität (fast) nachbauen
Es gibt zwar eine 1:1-Entsprechung zu dem Ribbonbefehl Diese Nachricht erneut senden… – allerdings können wir diesen Befehl auch nur aufrufen, wenn die erneut zu sendende E-Mail gerade geöffnet ist, also so, also ob wir die E-Mail gerade manuell erneut versenden wollen. Wenn wir die E-Mail einfach nur im Outlook-Hauptfenster markieren, finden wir den Befehl Diese Nachricht erneut senden… nirgends im Ribbon.
Wir können auch in den Outlook-Optionen für das Ribbon des E-Mail-Inspektorfensters suchen und finden dort beim Überfahren mit der Maus den Namen des idMso-Elements des Ribbons für diese Schaltfläche (siehe Bild 3).
Bild 3: Ermitteln der idMso des Ribbonbefehls Diese Nachricht erneut senden
Allerdings funktioniert der Aufruf wie folgt nicht:
Application.CommandBars.ExecuteMso "ResendThisMessage"
Wir müssen uns also zwangsläufig einer anderen Methode behelfen.
Mail erneut senden per Kopieren und Senden
Die Lösung ist so einfach wie elegant und erfordert nur wenige Zeilen Code. Die folgende Prozedur fügen wir einfach im Modul ThisOutlookSession ein. Die ersten drei Zeilen deklarieren die benötigten Variablen. Die erste das Outlook-Application-Objekt, das die Outlook-Anwendung repräsentiert, die beiden übrigen jeweils ein MailItem-Objekt – die erste für die erneut zu versendende E-Mail, die zweite für eine Kopie dieser Mail, die wir schließlich an den gewünschten Empfänger senden können:
Public Sub SendAgain() Dim objOutlook As Outlook.Application Dim objMailItem As Outlook.MailItem Dim objMailItemNew As Outlook.MailItem
Danach weisen wir objOutlook einen Verweis auf ein neues Outlook-Application-Objekt zu. Wir könnten im Kontext des Outlook-VBA-Projekts auch einfach mit Application arbeiten, aber damit wir den Code auch in andere Anwendungen übernehmen können, legen wir dafür direkt eine Variable an. Der Verweis auf New Outlook.Application holt entweder die bereits gestartete Instanz oder erstellt eine neue:
Set objOutlook = New Outlook.Application
Wenn Du diese Prozedur innerhalb von Outlook nutzt, verwende diese Anweisung:
Set objOutlook = Application
Dann referenzieren wir das erste Element der Selection-Auflistung von ActiveExplorer und referenzieren es mit objMailItem. Sollte aktuell mehr als ein Element markiert sein, wird das erste Element zurückgeliefert:
Set objMailItem = _
objOutlook.ActiveExplorer.Selection(1)
Dieses Element kopieren wir nun mit der Copy-Methode und referenzieren die Kopie mit objMailItemNew:
Set objMailItemNew = objMailItem.Copy
Schließlich stellen wir den Empfänger mit der Eigenschaft To auf die gewünschte Zieladresse ein und verwenden die E-Mail mit der Send-Methode:
With objMailItemNew .To = "info@amvshop.de" .Send End With End Sub
Das war es schon – die aktuell markierte E-Mail wird nun an den angegebenen Adressaten geschickt.
Funktion zum erneuten Versenden einfach aufrufen
Aktuell müssen wir die erneut zu versendende E-Mail noch markieren und dann im VBA-Editor die Funktion SendAgain aufrufen. Das ist schon für uns als Entwickler umständlich und einem einfachen Benutzer sollten wir eine solche Vorgehensweise gar nicht erst zumuten.
Wir haben zwei Ideen, wie wir dies vereinfachen können:
- Wir fügen dem Ribbon eine Schaltfläche hinzu, mit der wir die Prozedur über die Benutzeroberfläche aufrufen können. Der Nachteil ist, dass wir die E-Mail-Adresse zum Versenden fest im Code verdrahtet haben. Das ist kein Problem, solange wir solche E-Mails immer an den gleichen Empfänger verschicken wollen.
- Sobald wir mehr als eine Zieladresse haben, die aber in der Regel gleich bleiben, können wir eine zweite Lösung ausprobieren: Hier legen wir für jedes alternative Ziel zum erneuten Versenden einen eigenen Ordner an. Diesem Ordner fügen wir ein Ereignis hinzu, das beim Hinzufügen eines Elements ausgelöst wird. Sobald wir dem Ordner eine E-Mail zuweisen, soll diese kopiert und an die dem Ordner entsprechende Adresse geschickt werden.
E-Mail schnell per Schaltfläche erneut versenden
Für die erste Variante reicht es, wenn wir dem Ribbon über die Benutzeroberfläche einen neuen Button hinzufügen. Wir müssen nur noch entscheiden, wo wir diese Schaltfläche platzieren wollen. Wenn wir die erneut zu versendende E-Mail in der Liste der E-Mails markieren, wird kein besonderes Ribbon-Tab aktiviert. Da meist das Tab mit der Beschriftung Start angezeigt wird, wollen wir unsere Schaltfläche hier hinzufügen. Ein Makel bei der Ribbonprogrammierung ist, dass wir die eingebauten Group-Elemente nicht einfach erweitern oder anpassen können. Das heißt, dass wir entweder eine eingebaute Gruppe ausblenden und diese nachbauen – samt den von uns hinzugefügten Elementen. Oder wir fügen einfach eine eigene Gruppe für unseren Button hinzu.
Neuen Button zum Ribbon hinzufügen
Um dies zu erledigen, klicken wir oben im Ribbon auf die Schaltfläche mit dem Pfeil nach unten und wählen dort den Eintrag Weitere Befehle … aus (siehe Bild 4).
Bild 4: Anzeigen des Editors für das Ribbon
Im nun erscheinenden Dialog Outlook-Optionen klicken wir links auf Menüband anpassen. Dann öffnen wir auf der rechten Seite unter Hauptregisterkarten den Eintrag Start (E-Mail), sofern dieser noch nicht ausgeklappt ist. Hier klicken wir den Eintrag an, unter dem wir die neue Gruppe einfügen wollen, in diesem Fall Neu. Dann betätigen wir unten die Schaltfläche Neue Gruppe und fügen so die in Bild 5 gezeigte Gruppe hinzu.
Bild 5: Hinzufügen einer neuen Gruppe zum Ribbon-Tab Start
Diese Gruppe können wir nun nach Wunsch umbenennen, beispielsweise Weitere Verarbeitung. Dann wählen wir in der Auswahlliste über der linken Liste den Eintrag Makros aus und selektieren dort den Eintrag Projekt1.ThisOutlookSession.SendAgain.
Durch Anklicken der Schaltfläche Hinzufügen >> fügen wir die Schaltfläche nun zu der neu angelegten und markierten Gruppe hinzu.
Dann klicken wir diesen Befehl an und betätigen die Umbenennen…-Schaltfläche ein weiteres Mal. Dies öffnet einen Dialog, der nicht nur die Möglichkeit zum Umbenennen der Schaltfläche anbietet, sondern mit dem wir auch noch ein Icon für die Schaltfläche auswählen können. Die Auswahl ist recht spärlich, dennoch finden wir mit dem eingekreisten Pfeil nach rechts ein passendes Symbol (siehe Bild 6).
Bild 6: Hinzufügen und Anpassen der Schaltfläche zum Aufrufen des Makros
Danach schließen wir den Dialog mit der OK-Schaltfläche und probieren die neue Schaltfläche aus, die wir wie in Bild 7 vorfinden.
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