Die wichtigsten Grundlagen zur VBA-Steuerung von Oulook

Datenbank

Alle Office-Anwendungen sind programmierbar, sodass sich fehlende Funktionen per VBA (=Visual Basic for Applications, Programmiersprache Basic für Anwendungen) nachrüsten lassen. Besonders interessant dabei ist die Möglichkeit, andere Anwendungen als Objekte in VBA einzubinden. So können Sie mit wenigen Mausklicks auch Outlook in den Dienst von Access stellen. Diese Kombination mit Access wird häufig genutzt, um beispielsweise Notizen, Termine und Aufgaben zu verwalten oder um Informationen per E-Mail und Anhang zu verschicken. In dieser Ausgabe vermitteln wir dazu alle wichtigen Grundlagen und stellen fertige Lösungen für den Einsatz von Outlook mit Access vor, die Sie mit wenig Aufwand in Ihre Datenbankenanwendungen integrieren können.

Um eine Anwendung wie Outlook in Access zu nutzen, binden Sie zunächst ein entsprechendes „Objektmodell“ in VBA ein. Ein Objektmodell gibt Auskunft darüber, welche Eigenschaften, Auflistungen und Methoden die Anwendung zur Verfügung stellt und welche Parameter und Konstanten für den Aufruf einzelner Methoden anzugeben sind. Die Einbindung erfolgt in der VBA-Entwicklungsumgebung (Alt + F11) über das Menü EXTRAS-VERWEISE. Hier finden Sie neben den Office-Anwendungen von Microsoft eine umfangreiche Liste anderer Anwendungen und Objekte, die Sie theoretisch in Access nutzen können. Um mit Outlook zu arbeiten, aktivieren Sie das Kontrollkästchen vor dem Eintrag „Microsoft Outlook x.x Object Library“, wobei „x.x“ durch 14.0 für Outlook 2010, 12.0 für Outlook 2007, 11.0 für Outlook 2003, 10.0 für Outlook 2002/XP und 9.0 für Outlook 2000 zu ersetzen ist.

Nachdem Sie auf OK geklickt haben, ist Access das Objektmodell von Outlook bekannt und Sie können dessen Funktionen nutzen.

Eine Verbindung zu Outlook aufbauen
Für den Zugriff auf Outlook-Funktionen benötigen Sie eine Verbindung zwischen Access und Outlook. Dazu gibt es zwei Möglichkeiten: Sie können entweder eine bereits laufende Instanz von Outlook nutzen oder eine neue Instanz von Outlook starten.

In der Praxis hat es sich bewährt, eine bereits laufende Instanz zu nutzen und nur, wenn Outlook noch nicht läuft, eine neue Instanz zu starten. Die Verbindung erfolgt über eine Objektvariable vom Datentyp „Outlook.Application“, die in einem globalen Modul deklariert und entsprechend initialisiert wird:

Public objOutlApp As Outlook.Application

In einer globalen Funktion „InitOutlook“ erfolgt die Initialisierung dieser Objektvariablen vor der Nutzung von Outlook- Funktionen wie folgt:

Function InitOutlook() As Boolean
On Error Resume Next
InitOutlook = False ‚Default: Keine Verbindung
Set objOutlApp = GetObject(, „Outlook.Application“)
If Err <> 0 Or objOutlApp Is Nothing Then
Err = 0
Set objOutlApp = CreateObject(„Outlook.Application“)
If Err <> 0 Or objOutlApp Is Nothing Then
Beep
MsgBox „Verbindung zu Outlook kann nicht aufgebaut werden: “ & _
Err.Description, vbOKOnly + vbCritical, „Problem:“
Exit Function
End If ‚Err<> 0…
End If ‚Err<> 0…
InitOutlook = True
End Function

Um eine Verbindung zu einer bereits laufenden Instanz von Outlook herzustellen, wird zunächst versuchsweise die VBAFunktion „GetObject()“ aufgerufen, die im Erfolgsfall eine Referenz auf Outlook in der Objektvariablen „objOutlApp“ speichert. Ist Outlook nicht gestartet, hat das einen Laufzeitfehler zur Folge, der jedoch durch das eingangs abgesetzte „On Error Resume Next“ und die Abfrage „If Err <> 0 Then…“ entsprechend abgefangen wird. Der Aufruf der Funktion „CreateObject()“ versucht dann, eine neue Instanz von Outlook zu starten. Kommt es dabei wieder zu einem Laufzeitfehler („Err <> 0“) oder wurde die Objektvariable nicht initialisiert (Is „Nothing“), konnte Outlook nicht gestartet werden. Es erfolgen die Anzeige einer entsprechenden Meldung und das Verlassen der Funktion. Grund für einen Fehler in dieser Phase kann beispielsweise ein gar nicht oder nur unvollständig installiertes Outlook oder ein fehlerhaftes Outlook-Add- In sein, das sich nicht sauber initialisiert. Nachdem die Objektvariable „objOutlApp“ initialisiert ist, kann sie wie in den folgenden Beiträgen erläutert für die Nutzung von Outlook-Funktionen verwendet werden. Wichtig ist jedoch, dass Sie vor dem Beenden von Access die Verbindung zu Outlook unbedingt wieder trennen! Geschieht das nicht, kann Access nicht beendet werden: Das Access-Fens ter bleibt sichtbar, ein Klick auf das SCHLIEßEN Symbol oder der Aufruf von BEENDEN sind wirkungslos und es bleibt nur das Beenden des Prozesses MSACCESS.EXE über den Task-Manager. Sie müssen also nach der Nutzung von Outlook-Funktionen die Verbindung immer wie folgt trennen:

Function ResetOutlook()
On Error Resume Next
If Not objOutlApp Is Nothing Then
Set objOutlApp = Nothing
End If
End Function

 

Fertiges Modul nutzen

Sie finden die hier vorgestellten Funktionen „InitOutlook()“ und „ResetOutlook()“ sowie die Deklaration der globalen Objektvariablen „objOutlApp“ in der Beispieldatenbank zu diesem Beitrag im Modul „modOutlSubs“. Für die Nutzung in eigenen Datenbanken setzen Sie wie oben erläutert eine Referenz auf Outlook und übertragen dieses Modul über das Menü DATEI-EXTERNE DATEN-IMPORTIEREN (Access 2003, 2002/ XP und 2000) bzw. das Register „Externe Daten“, Gruppe „Importieren“, Symbol ACCESS in Ihre Datenbank (Access 2010 und 2007). Anschließend können Sie die Funktionen testen, indem Sie im Direktbereich der VBA-Entwicklungsumgebung (Strg + G) folgende Anweisungen eingeben:

? InitOutlook()
? objOutlApp.Version
ResetOutlook

Mit diesen Anweisungen wird zunächst eine Verbindung zu Outlook aufgebaut, dann die Version des laufenden Outlooks ausgegeben und schließlich die Verbindung wieder getrennt. Sie haben damit erfolgreich Outlook in Access eingebunden und eine Eigenschaft von Outlook ausgelesen. Die Nutzung weiterer nützlicher Outlook-Funktionen erläutern die weiteren Beiträge in dieser Ausgabe.

 

Dokumentation des Objektmodells

Bei der Eingabe der zweiten Anweisung „? objOutlApp.Version“ werden Sie festgestellt haben, dass Ihnen die VBA-Entwicklungsumgebung nach Eingabe des Punktes „.“ ein Dropdown-Menü mit verfügbaren Eigenschaften, Auflistungen und Methoden anzeigt. Nach Auswahl eines Eintrages erhalten Sie per Quick Info weitere Informationen wie z.B. den Datentyp bei Deklarationen oder erwartete Parameter bei Methoden. Diese Dokumentationstechnik nennt sich „IntelliSense“ und wird Ihnen eine große Hilfe bei der Programmierung Ihrer Outlook-Funktionen sein.

Außerdem können Sie einmal F2 für den Aufruf des Objekt-Browsers drücken. Hier finden Sie nach Einstellung der Bibliothek „Outlook“ alle verfügbaren Eigenschaften, Auflistungen, Methoden, Klassen und Konstanten grob dokumentiert.

Speichern Sie das Modul unter den Namen „modOutlSubs“ ab.


Option Compare Database
Option Explicit

Public objOutlApp As Outlook.Application
Function InitOutlook() As Boolean

On Error Resume Next
InitOutlook = False ‚Default: Keine Verbindung
Set objOutlApp = GetObject(, „Outlook.Application“)
If Err <> 0 Or objOutlApp Is Nothing Then
Err = 0
Set objOutlApp = CreateObject(„Outlook.Application“)
If Err <> 0 Or objOutlApp Is Nothing Then
Beep
MsgBox „Verbindung zu Outlook kann nicht aufgebaut werden: “ & _
Err.Description, vbOKOnly + vbCritical, „Problem:“
Exit Function
End If ‚Err<> 0…
End If ‚Err<> 0…

InitOutlook = True

End Function

Function ResetOutlook() As Boolean

On Error Resume Next
ResetOutlook = False ‚Default: Keine Verbindung
If Not objOutlApp Is Nothing Then
Set objOutlApp = Nothing
ResetOutlook = True
End If

End Function