Outlook-Objekte in Access speichern

Bereits einige Beiträge in Access im Unternehmen beschäftigt sich mit dem Im- und Export von Outlook-Objekten zwischen Access und Outlook. Dabei erfolgt das Synchronisieren immer zu einem vom Benutzer festgelegten Zeitpunkt. Was aber, wenn man in Access immer auf die aktuell in Outlook gespeicherten Daten zugreifen möchte, ohne die Daten manuell abzugleichen Ein Blick hinter die Kulissen des Outlook-Objektmodells bringt Lichts ins Dunkel.

Kontakte, E-Mails, Termine und Aufgaben – den Abgleich all dieser Objekte zwischen Access und Outlook haben Sie als fleißiger Leser bereits kennen gelernt. Falls nicht, empfiehlt sich ein Blick auf die im Onlinearchiv gespeicherten Beiträge mit den Shortlinks 290 (E-Mails), 439 (Termine), 113 und 129 (Kontakte) sowie 498 (Aufgaben).

Diese Artikel beschreiben in der Regel, wie Sie die jeweiligen Objekte von Access nach Outlook und zurück bekommen – allerdings immer von Access aus gesteuert. Dementsprechend sollte es auch kein Problem sein, in Access eine Funktion zu implementieren, die neu angelegte oder geänderte Elemente direkt nach dem Anlegen oder ändern mit Outlook synchronisiert.

Dies funktioniert natürlich auch andersherum: Sie können ohne größeren Aufwand dafür sorgen, dass Outlook, wenn ein Benutzer ein neues Element wie etwa einen Kontakt anlegt, direkt den passenden in einer Datenbank gespeicherten Eintrag ändert.

Beispielhaft

Um die Beispiele nachvollziehen zu können, kopieren Sie einfach den Inhalt der Datei ThisOutlookSession.cls in die gleichnamige Klasse im Outlook-VBA-Editor und passen die darin enthaltenen Pfadangaben an.

Outlook-Ereignisse

Zum Automatisieren von Outlook selbst bedarf es natürlich erstens eines kleinen Blickes in das Objektmodell und dort vor allem auf die Ereignisse, die beim Anlegen oder ändern von Outlook-Elementen ausgelöst werden – und es muss klar sein, dass Sie die notwendigen Prozeduren natürlich innerhalb von Outlook und nicht in einer Access-Anwendung anlegen. Der Ort für das Deklarieren ereignis-sensitiver Objekte in Outlook ist schnell gefunden: Es handelt sich dabei um ein standardmäßig vorhandenes Klassenmodul namens ThisOutlookSession. Die Ereignisprozeduren des Application-Objekts, also von Outlook selbst, werden hier, soweit vorhanden, automatisch ausgelöst. Das erkennen Sie ganz leicht, wenn Sie zum VBA-Editor wechseln (von Outlook aus am schnellsten per Strg + F11), dort das Modul ThisOutlookSession öffnen und im linken Kombinationsfeld des Codefensters Application auswählen. Das rechte Kombinationsfeld liefert dann alle möglichen Ereignisse. Die leere Ereignisprozedur, die das öffnen einer Outlook-Instanz auslöst, sieht dann etwa so aus:

Private Sub Application_Startup()
End Sub

Ab jetzt kommt es darauf an, was Sie vorhaben: Soll eine Mail, ein Kontakt, ein Termin oder eine Aufgabe direkt nach dem Anlegen in einer Access-Tabelle gespeichert werden Oder muss dies auch bei änderungen geschehen

Aufgaben nach Access

Werfen Sie zunächst einen Blick auf das Anlegen einer neuen Aufgabe in Outlook. Diese soll direkt nach dem Erzeugen in eine Access-Tabelle wie die aus dem Beitrag Outlook-Aufgaben (Shortlink 498) exportiert werden.

Was für ein Ereignis benötigen Sie hier Eines, das in Zusammenhang mit dem neuen Element (hier einer Aufgabe) selbst ausgelöst wird Nein! Das neue Element existiert ja zu dem Zeitpunkt, an dem Sie die Ereigniseigenschaft schreiben, die ein neues Aufgaben-Element nach Access schieben soll, noch gar nicht. Ein “New”- oder “Add”-Ereignis steht auch so gut wie nie für ein einzelnes Objekt zur Verfügung, sondern meist für die Auflistung, die das zu erzeugende Element einmal aufnehmen wird. Und das ist in diesem Falle die Items-Auflistung des Aufgaben-Ordners.

Damit Sie die Ereignisse eines Elements durch entsprechende Ereignisprozeduren abfangen können, müssen Sie dieses – wenn es nicht wie das Application-Element bereits vorhanden ist – zunächst deklarieren und instanzieren, wobei Sie beim Deklarieren das Schlüsselwort WithEvents verwenden. Die folgende Anweisung deklariert zunächst einen handelsüblichen Outlook-Ordner:

Dim WithEvents objItems As Outlook.Items

Damit dieses Objekt explizit beim Anlegen eines bestimmten Outlook-Elements Ereignisse auslöst, instanzieren Sie es mit dem entsprechenden Typ, hier der Items-Auflistung des Aufgaben-Ordners:

Private Sub Application_Startup()
 Set objItems = Application.Session.GetDefaultFolder(olFolderTasks).Items
End Sub

Im Gegensatz zum Verwenden einer Outlook-Instanz von Access aus benutzen Sie hier nicht die GetDefaultFolder-Methode von Application.GetNamespace(“MAPI”), sondern von Application.Session, was einen expliziten Zugriff auf die in der aktuellen Sitzung erzeugten und bearbeiteten Objekte zulässt.

Wenn Sie nun einen Blick auf die Ereignisse der oben deklarierten Auflistung objItems werfen, finden Sie auch direkt etwas Passendes (siehe Bild 1).

pic001.tif

Bild 1: Mit diesen Ereignissen lassen sich Outlook-Elemente nach dem Anlegen, ändern oder Entfernen mit einer passenden Access-Datenbank synchronisieren.

Für einen Test verwenden Sie zunächst das ItemAdd-Ereignis. Folgende Implementierung zeigt in einem Meldungsfenster den Betreff und den Inhalt einer frisch angelegten Aufgabe an, wobei der Parameter Item einen Verweis auf das passende Element liefert:

Private Sub objItems_ItemAdd(ByVal Item As _
Object) Dim objTaskItem As Outlook.TaskItem Set objTaskItem = Item With objTaskItem MsgBox .Subject & " " & .Body End With End Sub

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

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar