Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2007.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erweitern Sie Outlook um Funktionen, die etwa eine automatische Archivierung von Elementen in einer Access-Datenbank erlauben.

Techniken

Outlook, VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

ThisOutlookSession.cls

Shortlink

500

Outlook-Objekte in Access speichern

André Minhorst, Duisburg

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 (s. Abb. 1).

pic001.tif

Abb. 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

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.