Outlook-Folder im Griff

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.

Verweis auf die Outlook-Bibliothek

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

Schreibe einen Kommentar