TreeView für Outlook-Ordner

Anzeige der Ordner in Outlook

Bild 1: Anzeige der Ordner in Outlook

Im Beitrag “Outlook-Folder in Access anzeigen” liefern wir die Grundlagen zur Anzeige von Outlook-Ordnern in Access-Formularen. Dabei haben wir die einzelnen Outlook-Ordner in einem einfachen Listenfeld zur Auswahl angeboten. Im Beitrag “E-Mails verwalten mit dem Outlook View Control” wollen wir dies ein wenig professioneller gestalten und die Outlook-Ordner in einem TreeView-Steuerelement anzeigen. Wie das gelingt, erfahren Sie im vorliegenden Beitrag.

Das TreeView-Steuerelement, in dem wir die Outlook-Ordner in der gleichen hierarchischen Anordnung anzeigen wollen wie im entsprechenden Bereich von Outlook, soll die Auswahl eines der Ordner ermöglichen. Der Inhalt dieses Ordners soll in einem Outlook View Control erscheinen. Unter Outlook sieht die hierarchische Anzeige wie in Bild 1 aus.

Anzeige der Ordner in Outlook

Bild 1: Anzeige der Ordner in Outlook

Für den Anfang wollen wir uns dabei bezüglich der Icons damit begnügen, für jeden Ordner das gleiche Icon anzuzeigen, nämlich ein einfaches Ordner-Icon.

Außerdem wollen wir nur die Ordner anzeigen, die einen bestimmten Typ von Elementen enthalten. In diesem Fall sind das die Ordner, die typischerweise E-Mails enthalten. Wie Sie diese Ordner von den anderen unterschieden, erläutern wir weiter unten.

Welche Schritte sind für die Umsetzung unseres Vorhanbens nötig Zunächst benötigen wir einige Steuerelemente:

  • ein TreeView-Steuerelement und
  • ein ImageList-Steuerelement zum Speichern der zu verwendenden Icons.

Außerdem benötigen wir VBA-Code, der beim Laden des Formulars ausgelöst wird und der die betreffenden Ordner aus Outlook einliest und entsprechende Einträge im TreeView-Steuerelement anlegt.

Steuerelemente hinzufügen

Die beiden benötigten Steuerelemente fügen Sie der Entwurfsansicht eines neuen Formulars namens frmEMailDetails hinzu, indem Sie über den Ribbon-Eintrag Entwurf|Steuerelemente|ActiveX-Steuerelemente den Dialog Ac-tiveX-Steu-er-ele-ment ein-fügen öffnen. Hier wählen Sie als Erstes das Steuerelement Microsoft TreeView Control, version 6.0 aus und klicken OK (siehe Bild 2).

Hinzufügen der ActiveX-Steuerelemente

Bild 2: Hinzufügen der ActiveX-Steuerelemente

Danach führen Sie den gleichen Vorgang für das Steuerelement Microsoft ImageList Control, version 6.0 aus.

Legen Sie für dieses Steuerelement den Namen ctlImageList fest und für das TreeView-Steuerelement den Namen ctlTreeView. Ziehen Sie das TreeView-Steuerelement so auf, dass es sich am linken Rand des Formulars befindet (siehe Bild 3).

Die beiden neuen Steuerelemente im Formular

Bild 3: Die beiden neuen Steuerelemente im Formular

Icons zu ImageList-Steuerelement hinzufügen

Danach fügen wir das zunächst zu verwendende Icon zum ImageList-Steuerelement hinzu. Dazu klicken Sie doppelt auf das Steuerelement und erhalten den Dialog Eigenschaften von ImageListCtrl. Hier stellen Sie die Bildgröße auf der Registerseite General auf 16 x 16 ein (siehe Bild 4).

Festlegen der Icon-Größe

Bild 4: Festlegen der Icon-Größe

Danach wechseln Sie auf die Registerseite Images und klicken dort auf die Schaltfläche Insert Picture…, was einen Dateiauswahl-Dialog öffnet.

Hier fügen Sie nacheinander zwei Icons ein, die einen geschlossenen und einen geöffneten Ordner anzeigen (siehe Bild 5). Für diese beiden Elemente legen Sie im Feld Key die Schlüssel folder_closed und folder_open fest.

Hinzufügen und benennen der Icons

Bild 5: Hinzufügen und benennen der Icons

Einstellungen für das TreeView-Steuerelement

Danach nehmen wir die Einstellungen für das TreeView-Steuerelement vor. Das erledigen wir in der Regel per VBA, weil sich so ein Satz von Einstellungen recht leicht von einer Lösung zur nächsten übertragen lässt – das geht schneller, als wenn Sie die Einstellungen jedes Mal erneut im Eigenschaften-Fenster erledigen.

Die Einstellungen nehmen wir in einer eigenen Prozedur vor, die wir InitializeTreeView nennen. Diese rufen wir in der Ereignisprozedur auf, die beim Laden des Formulars ausgelöst wird:

Private Sub Form_Load()
     InitializeTreeView
     ...
End Sub

Die Prozedur InitializeTreeView sieht wie folgt aus:

Private Sub InitializeTreeView()
     Dim objTreeView As MSComctlLib.TreeView
     Set objTreeView = Me!ctlTreeView.Object
     With objTreeView
         .Appearance = ccFlat
         .BorderStyle = ccNone
         .Font.Name = "Calibri"
         .Font.Size = 9
         .Indentation = 200
         Set .ImageList = Me!ctlImageList.Object
         .LineStyle = tvwRootLines
         .Style = tvwTreelinesPlusMinusPictureText
         .Nodes.Clear
         FillTreeView objTreeView
         ExpandTreeViewNodes objTreeView
     End With
End Sub

Sie füllt zunächst die Variable objTreeView mit einem Verweis auf das TreeView-Steuerelement. Dann stellt sie einige Eigenschaften für das so referenzierte TreeView-Steuerelement ein. Appearance gibt an, ob es in einer 3D-Ansicht oder flach angezeigt werden soll.

Mit BorderStyle legen wir fest, dass kein Rahmen erscheinen soll – wenn, dann definieren wir diesen über die Steuerelementeigenschaften des Containers für das ActiveX-Steuerelement. Mit Font referenzieren wir das Font-Objekt, mit dessen Eigenschaften Name und Size wir die Schriftart und die Schriftgröße einstellen.

Den Standardeinzug reduzieren wir mit der Eigenschaft Indentation auf den Wert 200 (standardmäßig 567). Die Eigenschaft ImageList legt das zu verwendende ImageList-Steuerelement fest, aus dem die Icons für die TreeView-Elemente bezogen werden. Hier müssen wir wie beim TreeView-Steuerelement mit Object auf das im ActiveX-Container enthaltene Steuerelement zugreifen. LineStyle gibt mit dem Wert tvwRootLines an, dass wir schon für die Root-Elemente Linien und somit auch Plus/Minus-Zeichen anzeigen wollen. Und mit Style und dem Wert tvwTreelinesPlusMinusPictureText bestimmen wir, dass Linien, Plus/Minus-Zeichen, Icons und Text für die einzelnen Elemente angezeigt werden sollen – also das komplette Programm.

Schließlich leeren wir die Nodes-Auflistung des Steuerelements, damit eventuell bei einer früheren Anzeige noch verbliebene Elemente verschwinden und rufen die Prozedur FillTreeView auf, der wir den Verweis auf das zu füllende TreeView-Steuerelement übergeben. Nachdem dies geschehen ist, wollen wir noch den Eingeklappt/Ausgeklappt-Zustand der Elemente wiederherstellen, der vor dem letzten Schließen des Formulars Bestand hatte. Das erledigen wir mit der Prozedur ExpandTreeViewNodes, dem wir ebenfalls einen Verweis auf das TreeView-Steuerelement übergeben.

Füllen des TreeView-Steuerelements mit den Outlook-Ordner

Die Prozedur FillTreeView nimmt mit dem Parameter objTreeView einen Verweis auf das zu füllende TreeView-Steuerelement entgegen (siehe Listing 1). Sie referenziert eine neue oder die aktive Outlook-Instanz mit der Variablen objOutlook und weist der Variablen objNamespace dann mit der GetNamespace-Methode den MAPI-Namespace zu. Anschließend durchläuft sie alle Folder-Objekte, die direkt im MAPI-Namespace enthalten sind. Typischerweise sind das Ordner wie Outlook oder solche, welche nach der E-Mail-Adresse benannt sind, für die eine eigene .pst-Datei angelegt wurde. Diese Folder-Objekte durchläuft die Prozedur in einer For Each-Schleife, wobei sie das jeweilige Objekt mit der Variablen objFolder referenziert.

Private Sub FillTreeView(objTreeView As MSComctlLib.TreeView)
     Dim objOutlook As Outlook.Application
     Dim objNamespace As Outlook.Namespace
     Dim objFolder As Outlook.Folder
     Dim objNode As MSComctlLib.Node
     Set objOutlook = New Outlook.Application
     Set objNamespace = objOutlook.GetNamespace("MAPI")
     For Each objFolder In objNamespace.Folders
         If objFolder.DefaultItemType = olMailItem Then
             Set objNode = objTreeView.Nodes.Add(, , objFolder.FolderPath, objFolder.Name, "folder_closed")
             FillNode_Rek objTreeView, objNode, objFolder
         End If
     Next objFolder
End Sub

Listing 1: TreeView-Steuerelement füllen

Innerhalb der Schleife prüft die Prozedur den Typ der standardmäßig in diesem Ordner enthaltenen Elemente. Die mit der Eigenschaft DefaultItemType ermittelte Einstellung soll in diesem Fall olMailItem lauten, da wir nur die Mailordner anzeigen wollen.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar