Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Wenn Sie auf die Objekte von Outlook zugreifen wollen, egal, ob es sich um E-Mails, Termine, Kontakte, Aufgaben oder andere Objekte handelt, müssen Sie zuvor den Ordner referenzieren, der die jeweiligen Elemente enthält. Dazu gibt es eine Reihe verschiedener Techniken. Dieser Artikel zeigt, wie Sie den grundlegenden Zugriff auf eine Outlook-Instanz, auf das enthaltene MAPI-Namespace-Objekt sowie die von diesem verwalteten Ordner realisieren. In weiteren Artikeln nutzen wir diese Techniken als Grundlage für den Zugriff auf E-Mails, Termine, Kontakte und Co.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 2003_OutlookFolder.accdb.
Verweis auf Outlook
Damit wir einfach per VBA auf Outlook und sein Objektmodell zugreifen können, fügen Sie dem VBA-Projekt der Beispieldatenbank einen Verweis auf die Bibliothek Microsoft Outlook x.0 Object Library. Dazu öffnen Sie mit Alt + F11 den VBA-Editor und wählen den Menüeintrag Extras|Verweise aus. Im nun erscheinenden Dialog Verweise fügen Sie den Eintrag aus Bild 1 hinzu.
Bild 1: Verweis auf die Outlook-Bibliothek
VBA-Zugriff auf Outlook
Wenn wir auf die Daten von Outlook zugreifen wollen, müssen wir zunächst eine Outlook-Instanz starten. Gegebenenfalls ist Outlook auch bereits geöffnet, weil Sie es über die Benutzeroberfläche gestartet haben. In diesem Fall können Sie auch auf die bestehende Outlook-Instanz zugreifen. Für den Zugriff auf die Outlook-Instanz erstellen wir uns eine kleine Funktion. Diese legt den Verweis auf die Outlook-Instanz direkt in einer Objektvariablen ab, sodass wir beim nächsten Zugriff auf Outlook innerhalb dieser Session nicht nochmal eine neue Outlook-Instanz starten oder eine vorhandene Instanz referenzieren müssen. Diese Funktion legen wir in einem Standardmodul des VBA-Projekts der Beispieldatenbank an. Die Funktion verwendet eine private Variable im gleichen Modul, in dem wir den Verweis speichern, nachdem wir diesen geholt haben:
Private m_Outlook As Outlook.Application
Die folgende Funktion heißt GetOutlook und soll ein Objekt des Typs Outlook.Application zurückliefern. Dazu prüft sie zunächst, ob nicht von einem vorherigen Aufruf noch eine Outlook-Instanz vorhanden ist und durch die Variable m_Outlook referenziert wird. Dazu prüfen wir, ob m_Outlook gleich Nothing ist:
Public Function GetOutlook() As Outlook.Application If m_Outlook Is Nothing Then Set m_Outlook = New Outlook.Application
Anderenfalls prüfen wir bei deaktivierter Fehlerbehandlung, ob m_Outlook tatsächlich auf eine gültige Outlook-Instanz verweist. Das finden wir ganz einfach heraus, indem wir den Inhalt der Eigenschaft Name prüfen. Warum prüfen wir den Namen, auch wenn wir schon wissen, dass m_Outlook nicht den Wert Nothing enthält Weil es sein kann, dass wir mit Access eine Referenz auf eine Outlook-Instanz holen, die der Benutzer zuvor schon geöffnet hat. Wir referenzieren dann also die bereits geöffnete Outlook-Instanz. Wenn der Benutzer diese dann schließt, bekommen wir das unter VBA nicht direkt mit. Erst, wenn wir dann prüfen, ob der Zugriff auf eine der Eigenschaften, hier Name, ohne Fehler funktioniert, können wir sicher sein, dass unsere Objektvariable auf eine noch aktive Outlook-Instanz verweist. Falls das nicht der Fall ist, erstellen wir schließlich eine neue Instanz und referenzieren diese wiederum mit m_Outlook:
Else On Error Resume Next If Len(m_Outlook.Name) = 0 Then Set m_Outlook = New Outlook.Application End If On Error GoTo 0 End If
Im letzten Schritt geben wir die in m_Outlook enthaltene Instanz als Ergebnis der Funktion zurück:
Set GetOutlook = m_Outlook End Function
Wir können nun mit der folgenden Anweisung auf die Outlook-Instanz zugreifen, die wir beispielsweise im Direktbereich des VBA-Editors absetzen:
GetOutlook.Name Outlook
Namespace-Objekt verfügbar machen
Nachdem wir einen einfachen Zugang zu einer bestehenden oder neu erstellten Outlook-Instanz geholt haben, können wir immer noch nicht auf die Outlook-Termine zugreifen. Dazu benötigen wir das NameSpace-Objekt, das wir über die Methode GetNameSpace des Outlook-Objekts holen. Auch dafür deklarieren wir eine private Variable:
Private m_MAPINameSpace As Outlook.NameSpace
Die folgende Funktion soll ein Objekt des Typs Outlook.NameSpace zurückliefern. Auch hier prüfen wir wieder, ob die Variable m_MAPINameSpace nicht vo einem vorherigen Aufruf noch eine Verweis auf das MAPI-Namespace enthält. Ist das nicht der Fall, holen wir dieses erneut, indem wir mit Get-Outlook eine Outlook-Instanz holen und dann mit GetNameSpace(“MAPI”) das MAPI-Namespace von Outlook ermitteln:
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