Outlook: Codebeispiele ausprobieren

In diesem Magazin stellen wir immer wieder Beispiele zur Programmierung von Outlook per VBA vor. Während wir solchen Beispielcode bei den anderen Anwendungen wie Word, Excel oder PowerPoint oder auch unter Access in entsprechenden Beispieldokumenten unterbringen können, müssen wir die Outlook-Beispiele in das VBA-Projekt von Outlook einfügen, um diese auszuprobieren. Wie das gelingt, zeigt der vorliegende Artikel.

Die Beispiele in unseren Artikeln zur Programmierung von Outlook über das VBA-Projekt von Outlook selbst enthalten manchmal nur einzelne Prozeduren, die Du direkt in ein beliebiges Standardmodul im VBA-Projekt von Outlook einfügen kannst – optimalerweise in ein neues, leeres Standardmodul, damit Du keine Module mit bestehendem Code beeinflusst, weil dann beispielsweise eine Variablendeklaration dort doppelt vorkommt.

Gelegentlich liefern wir aber auch komplette Module, die in zwei Typen aufgeteilt werden können:

  • Standardmodule: Diese enthalten Routinen, die wir direkt starten können, sofern diese keine Parameter aufweisen. Routinen mit Parametern müssen wir beispielsweise über den Direktbereich starten und übergeben dabei die Werte für die Parameter.
  • Klassenmodule: Klassenmodule müssen immer erst initialisiert und mit einer entsprechenden Objektvariablen referenziert werden, bevor wir die darin enthaltenen Methoden starten können. Eine Ausnahme ist das immer bereits vorhandene Klassenmodul ThisOutlookSession. Die hier aufgeführten Routinen können wir wie die in Standardmodulen direkt starten.

VBA-Routinen direkt starten

Was aber bedeutet “direkt starten” eigentlich Damit meinen wir, dass Du die Routine (also die Sub– oder Function-Prozedur) im Code-Fenster im VBA-Editor markierst (dazu muss sich die Einfügemarke irgendwo innerhalb der Prozedur befinden) und dann entweder die Taste F5 betätigst, den Menübefehl Ausführen|Sub/Userform ausführen aufrufst oder die gleichnamige Schaltfläche mit dem Abspielen-Symbol anklickst.

Damit kannst Du beispielsweise Prozeduren wie die Folgende Starten:

Public Sub Beispielaufruf
     MsgBox "Beispielaufruf"
End Sub

Das Ergebnis sieht wie in Bild 1 aus.

Starten einer einfachen Sub-Prozedur

Bild 1: Starten einer einfachen Sub-Prozedur

Wenn die Sub– oder Function-Prozedur jedoch einen oder mehrere Parameter enthält, kannst Du diese nicht mehr direkt starten. Versuchst Du es auf die gleiche Weise wie zuvor, erscheint wie in Bild 2 der Dialog Makros.

Fehlgeschlagener Aufruf einer Prozedur mit Parameter

Bild 2: Fehlgeschlagener Aufruf einer Prozedur mit Parameter

Hier ist nun eine von zwei Alternativen möglich:

  • Wenn die Prozedur mit Parameter nur wenige Male ausprobiert werden soll, rufen wir diese über den Direktbereich auf.
  • Wenn absehbar ist, dass die Prozedur mit Parametern des Öfteren aufgerufen werden soll, schreiben wir den Aufruf in eine eigene Prozedur.

Für den Aufruf über den Direktbereich schreiben wir den folgenden Befehl unter Angabe des Parameters einfach in den Direktbereich und betätigen die Eingabetaste:

BeispielMitParameter "Beispielparameter"

Das sieht beispielsweise wie in Bild 3 aus.

Aufruf einer Prozedur mit Parameter aus dem Direktbereich

Bild 3: Aufruf einer Prozedur mit Parameter aus dem Direktbereich

Wir können den Aufruf allerdings auch direkt im gleichen Modul wie die Prozedur in einer weiteren Prozedur unterbringen, die beispielsweise wie folgt aussieht:

Public Sub BeispielAufrufen()
     BeispielMitParameter "Beispielparameter"
End Sub

Aufruf von Methoden in Klassenmodulen

Das gelingt allerdings beides nicht, wenn sich die Prozedur in einem Klassenmodul befindet. Wie bereits weiter oben erwähnt, müssen wir das Klassenmodul zuvor initialisieren und referenzieren, bevor wir seine Methoden (so werden Prozeduren in Klassenmodulen auch genannt) verwenden können. Wir schauen uns auch das in einem Beispiel an, da es in vielen Fällen notwendig sein wird, mit Klassenmodulen zu arbeiten.

Der Grund ist meistens, dass wir eine Objektvariable mit dem Schlüsselwort WithEvents deklarieren müssen, was nur in Klassenmodulen möglich ist. Warum benötigen wir das Schlüsselwort WithEvents Weil wir damit sicherstellen, dass wir die Ereignisprozeduren für das jeweilige Objekt in der aktuellen Klasse implementieren können. Das ist in Standardmodulen nicht möglich.

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins DATENBANKENTWICKLER:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar