Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Die verschiedenen Klassen von Outlook bieten eine ganze Reihe von Ereignissen an. Diese werden durch unterschiedliche Aktionen ausgelöst. Eine dieser Aktionen ist das Eintreffen einer oder mehrerer neuer E-Mails. Dieses Ereignis mit einer geeigneten Ereignisprozedur abzufangen ist ein sinnvolles Beispiel für die Beschreibung der Programmierung von Ereignissen unter Outlook. Mit E-Mails kann man nach dem Eingang eine Menge anstellen – diese löschen, in einen anderen Ordner verschieben, die Message-Datei im Dateisystem sichern oder auch die Inhalte auslesen, um diese etwa in eine Datenbank zu schreiben. In diesem Artikel erläutern wir erst einmal allgemein, wie wir überhaupt mit VBA-Code auf den Eingang einer E-Mail reagieren können.
Outlook bietet alles, was man braucht – E-Mails werden abgerufen und landen im Posteingangs-Ordner. Man kann verschiedene Regeln aufstellen, nach denen die eingehenden E-Mails automatisch nach den gewünschten Kriterien in verschiedene Ordner verschoben werden, und wenn es auch der Ordner Gelöschte Objekte oder der Spam-Ordner ist. Und natürlich können wir die E-Mails auch manuell in andere Ordner verschieben oder auch Aufgaben auf Basis einer E-Mail erstellen. Noch schöner wäre es allerdings, wenn wir die gewünschten Schritte individuell programmieren könnten.
Welches Objekt und welches Ereignis?
Dazu müssen wir erst einmal wissen, wie wir eine Ereignisprozedur programmieren, mit der wir auf den Eingang einer E-Mail reagieren können. Der erste Schritt ist dabei, herauszufinden, welches Ereignis welcher Klasse wir überhaupt nutzen können. In weiteren Artikeln zur Programmierung von Outlook per VBA haben wir bereits gesehen, dass es unterschiedliche Klassen gibt, mit denen wir die verschiedenen Elemente der Benutzeroberfläche referenzieren können. Mit dem Application-Objekt greifen wir auf die Anwendung selbst zu, mit dem Explorer-Objekt auf die verschiedenen Ansichten von Outlook und mit dem Inspector-Objekt auf von Outlook aus geöffnete Fenster beispielsweise zur Anzeige einer E-Mail. Außerdem gibt es noch Klassen, mit denen wir die einzelnen Ordner oder die darin enthaltenen Elemente wie E-Mails, Kontakte, Termine oder Aufgaben referenzieren können.
Wenn wir neu im Thema sind und nicht genau wissen, welche Klasse welche Ereignisse bietet, hilft uns ein Blick in den Objektkatalog. In unserem Beispiel, wo wir auf den Eingang einer E-Mail reagieren wollen, gibt es unterschiedliche Ideen, welche Klasse ein passendes Ereignis bietet. Vielleicht gibt es ein Ereignis, das ausgelöst wird, wenn einem Ordner ein neues Element hinzufügt wird? Oder wird ein solches Ereignis von einer anderen Klasse zur Verfügung gestellt?
Haben wir Outlook geöffnet, starten wir mit Alt + F11 den VBA-Editor. Hier zeigen wir mit F2 den Objektkatalog an. Oben im Fenster wählen wir statt dem Eintrag Alle Bibliotheken die Bibliothek Outlook aus, direkt darunter geben wir als Suchbegriff Mail ein.
In der Liste der Suchergebnisse suchen wir nun nach Elementen, die durch ein Blitz-Icon markiert werden und stoßen schnell auf die beiden Ereignisse NewMail und NewMailEx (siehe Bild 1). Klicken wir NewMail an, sehen wir die Beschreibung dieses Ereignisses im unteren Bereich. Außerdem sehen wir, dass es sich hierbei um ein Ereignis der Klasse Outlook.Application handelt.
Bild 1: Ermitteln von Ereignissen für E-Mails
Das Gleiche gilt für das Ereignis NewMailEx. Klicken wir dieses im Objektkatalog an, finden wir schnell heraus, dass es im Gegensatz zum Ereignis NewMail noch einen Parameter namens EntryIDCollection mit dem Datentyp String liefert (siehe Bild 2).
Bild 2: Das Ereignis NewMailEx im Objektkatalog
Neben diesen beiden offensichtlichen Möglichkeiten gibt es noch ein weiteres Ereignis, das durch das Empfangen einer E-Mail ausgelöst wird. Dabei handelt es sich um das Ereignis ItemAdd der Items-Auflistung eines Folder-Objekts, das ausgelöst wird, wenn einem Ordner ein Element hinzugefügt wird. Um dieses zu nutzen, um auf den Eingang neuer E-Mails zu reagieren, müssen wir den richtigen Ordner damit ausstatten, in der Regel den Ordner Posteingang. Wie das gelingt, zeigen wir gegen Ende des Artikels.
Ereignisse implementieren
Um ein Ereignis in Form einer Ereignisprozedur zu implementieren, benötigen wir zunächst ein Klassenmodul. Nur in einem solchen können wir die Klasse, welche das Ereignis bereitstellt, mit dem Schlüsselwort WithEvents deklarieren, und ohne dieses Schlüsselwort können wir die Ereignisprozedur nicht implementieren.
Zum Glück haben wir mit dem Klassenmodul ThisOutlookSession immer ein Klassenmodul zur Hand, welches wir noch nicht einmal initialisieren müssen, dass es standardmäßig bereits initialisiert ist. Noch besser: Die Klasse Application steht hier immer bereit, sodass wir diese noch nicht einmal deklarieren müssen. Um ein Ereignis für Outlook.Application zu implementieren, müssen wir nur zwei Schritte erledigen:
- Wir wählen im linken Kombinationsfeld des Codefensters des Moduls ThisOutlookSession den Eintrag Application aus. Dies legt automatisch das Standardereignis für diese Klasse an, in diesem Fall Application_ItemSend.
- Dann wählen wir im rechten Kombinationsfeld das Ereignis aus, das wir eigentlich implementieren wollen, nämlich zunächst einmal NewMail (siehe Bild 3)
Bild 3: Das Ereignis NewMail implementieren