Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Bild 1: Outlook-Ordner für E-Mails
Bei einer frischen Outlook-Installation ist die Ordner-Hierarchie recht übersichtlich. Je mehr E-Mails man mit Outlook erhält oder je mehr man mit den übrigen Objekten arbeitet, umso mehr Ordner legt man in den bereits vorhandenen Ordnern als Unterordner an. Für uns ist natürlich vor allem interessant, wie wir per VBA auf die einzelnen Ordner zugreifen, Ordner ermitteln, anlegen, bearbeiten oder auch löschen. Interessant ist auch, gezielt nach einem Ordner zu suchen und diesen zu referenzieren. Gegebenenfalls möchten wir auch einmal alle vorhandenen Ordner durchlaufen, um die enthaltenen Elemente zu verarbeiten. Wie all dies funktioniert, zeigen wir im vorliegenden Artikel!
Wer eine neue Outlook-Installation öffnet und ein erstes E-Mail-Konto angelegt hat, findet erst einmal nur die Standardordner im linken Bereich des Outlook-Fensters vor. Dazu gehören der Posteingang, der Postausgang, Ordner für gelöschte Elemente, Entwürfe, gesendete Elemente und für Junk-E-Mail (siehe Bild 1).
Bild 1: Outlook-Ordner für E-Mails
Wechseln wir über die Schaltflächen unten links zu einem der anderen Bereiche wie beispielsweise dem Kalender, den Kontakten oder den Aufgaben, finden wir im linken Bereich wiederum verschiedene Ordner für die jeweilige Kategorie vor. Wer immer alle Ordner aus den verschiedenen Bereichen im Überblick sehen möchte, kann über die Schaltfläche mit den drei Punkten weitere Befehle anzeigen (sofern diese noch nicht sichtbar sind) und über den Befehl Ordner eine Übersicht aller Ordner einblenden. Diese liefert schließlich alle Ordner der verschiedenen Kategorien in einer Liste (siehe Bild 2).
Bild 2: Alle Outlook-Ordner im Überblick
Zugriff von innen und außen
Die Beispiele zu diesem Artikel haben wir so programmiert, dass Du sie sowohl direkt in den Modulen des VBA-Projekts von Outlook verwenden kannst, aber auch in anderen Anwendungen wie Access, Excel oder Word.
Wir greifen also nicht einfach über die Klasse Application auf die davon bereitgestellten Objekte, Eigenschaften, Methoden und Ereignisse zu, sondern über eine Objektvariable namens objOutlook, die wir zuvor deklarieren und füllen.
Außerdem wollen wir per Early Binding auf die Klassen zugreifen, damit wir IntelliSense beim Programmieren nutzen können. Wenn Du nicht vom VBA-Projekt von Outlook aus auf die Outlook-Objekte zugreifen möchtest, musst Du dazu noch einen Verweis auf die Objektbibliothek von Outlook hinzufügen.
Dazu öffnest Du den VBA-Editor von der jeweiligen Anwendung aus und wählst dort den Menübefehl Extras|Verweise aus.
Es erscheint der Verweise-Dialog, wo Du in der Liste den Eintrag Microsoft Outlook 16.0 Object Library auswählst (siehe Bild 3). Danach schließt Du den Dialog wieder.
Bild 3: Hinzufügen eines Verweises auf die Outlook-Objektbibliothek
Auf die Outlook-Anwendung greifen wir dann mit den folgenden beiden Befehlen zu:
Dim objOutlook As Outlook.Application Set objOutlook = New Outlook.Application
Auf diese Weise können wir auch beispielsweise vom VBA-Projekt einer Excel-Datei oder von anderen Anwendungen darauf zugreifen.
Mutter aller Ordner: Der MAPI-Namespace
Wenn wir direkt auf die Ordner von Outlook zugreifen wollen, können wir nicht direkt irgendeine Folders-Auflistung des Application-Objekts von Outlook nutzen, sondern es gibt noch eine Zwischenschicht. Diese ist das Namespace-Objekt, das wir allerdings nicht mit dem New-Schlüsselwort erzeugen, sondern mit der Methode GetNamespace holen.
Für diese übergeben wir den Wert MAPI als Parameter. Das Namespace-Objekt deklarieren wir beispielsweise als objMAPI oder objNamespace und weisen es dann wie folgt zu:
Dim objMAPI As Outlook.NameSpace Set objMAPI = objOutlook.GetNamespace("MAPI")
Zugriff über die Folders-Auflistung
Die einfachste Methode, auf ein Folder-Element zuzugreifen ist die Folders-Auflistung des NameSpace-Objekts. Mit seiner Count-Eigenschaft können wir die Anzahl der Folder-Objekte ermitteln, allerdings nur für die der ersten Ebene.
Was im Neuzustand einer Outlook-Datei noch nicht zu erkennen ist: Wir können den vorhandenen Ordnern durchaus Unterordner hinzufügen. Genaugenommen ist das auch schon der Fall, wie der erste Aufruf der Count-Eigenschaft der Folders-Auflistung zeigt:
Debug.Print objMAPI.Folders.Count
1
Folder-Element referenzieren
Wir erhalten nämlich genau ein Folder-Element. Auf dieses wollen wir nun zugreifen und seinen Namen ermitteln. Dazu referenzieren wir es, was auf verschiedene Arten gelingt. Die erste ist die über den Index. Damit greifen wir wie folgt auf das Element zu:
Debug.Print objMAPI.Folders(1).Name
andre@minhorst.com
Als Ergebnis erhalten wir den Namen des Hauptordners, in diesem Fall nach der E-Mail-Adresse benannt, für die wir Outlook eingerichtet haben. Je nach Einrichtung kann dieser Ordner auch Outlook heißen. Eine weitere wichtige Information hieraus ist: Der Index der Folders-Auflistung ist 1-basiert.
Die zweite Möglichkeit, ein Folder-Element über die Folders-Auflistung zu referenzieren, ist die Angabe des Namens, sofern dieser bekannt ist.
Debug.Print objMAPI.Folders("andre@minhorst.com").Name
Was die Eigenschaften und Methoden der Folder-Klasse angeht, tappen wir hier etwas im Dunkeln, denn wenn wir ein Element über die Auflistung ansprechen, werden diese nicht per IntelliSense bereitgestellt. Dazu benötigen wir eine entsprechende Objektvariable.
Variable für Folder-Element