{"id":55001293,"date":"2021-04-01T00:00:00","date_gmt":"2021-07-31T10:17:57","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1293"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"TreeView_fuer_OutlookOrdner","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/","title":{"rendered":"TreeView f&uuml;r Outlook-Ordner"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/58dbc9bfdafc422da6abc6b0560a7eff\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_02\/pic_1293_001.png\" alt=\"Anzeige der Ordner in Outlook\" width=\"424,7115\" height=\"674,112\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Anzeige der Ordner in Outlook<\/span><\/b><\/p>\n<p><b>Im Beitrag &#8222;Outlook-Folder in Access anzeigen&#8220; 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 &#8222;E-Mails verwalten mit dem Outlook View Control&#8220; wollen wir dies ein wenig professioneller gestalten und die Outlook-Ordner in einem TreeView-Steuerelement anzeigen. Wie das gelingt, erfahren Sie im vorliegenden Beitrag.<\/b><\/p>\n<p>Das <b>TreeView<\/b>-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&ouml;glichen. Der Inhalt dieses Ordners soll in einem <b>Outlook View Control <\/b>erscheinen. Unter Outlook sieht die hierarchische Anzeige wie in Bild 1 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_02\/pic_1293_001.png\" alt=\"Anzeige der Ordner in Outlook\" width=\"424,7115\" height=\"674,112\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Anzeige der Ordner in Outlook<\/span><\/b><\/p>\n<p>F&uuml;r den Anfang wollen wir uns dabei bez&uuml;glich der Icons damit begn&uuml;gen, f&uuml;r jeden Ordner das gleiche Icon anzuzeigen, n&auml;mlich ein einfaches Ordner-Icon.<\/p>\n<p>Au&szlig;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&auml;utern wir weiter unten.<\/p>\n<p>Welche Schritte sind f&uuml;r die Umsetzung unseres Vorhanbens n&ouml;tig Zun&auml;chst ben&ouml;tigen wir einige Steuerelemente:<\/p>\n<ul>\n<li>ein <b>TreeView<\/b>-Steuerelement und<\/li>\n<li>ein <b>ImageList<\/b>-Steuerelement zum Speichern der zu verwendenden Icons.<\/li>\n<\/ul>\n<p>Au&szlig;erdem ben&ouml;tigen wir VBA-Code, der beim Laden des Formulars ausgel&ouml;st wird und der die betreffenden Ordner aus Outlook einliest und entsprechende Eintr&auml;ge im <b>TreeView<\/b>-Steuerelement anlegt.<\/p>\n<h2>Steuerelemente hinzuf&uuml;gen<\/h2>\n<p>Die beiden ben&ouml;tigten Steuerelemente f&uuml;gen Sie der Entwurfsansicht eines neuen Formulars namens <b>frmEMailDetails<\/b> hinzu, indem Sie &uuml;ber den Ribbon-Eintrag <b>Entwurf|Steuerelemente|ActiveX-Steuerelemente <\/b>den Dialog <b>Ac-tiveX-Steu-er-ele-ment ein-f&uuml;gen <\/b>&ouml;ffnen. Hier w&auml;hlen Sie als Erstes das Steuerelement <b>Microsoft TreeView Control, version 6.0 <\/b>aus und klicken <b>OK<\/b> (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_02\/pic_1293_002.png\" alt=\"Hinzuf&uuml;gen der ActiveX-Steuerelemente\" width=\"499,6607\" height=\"358,1218\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Hinzuf&uuml;gen der ActiveX-Steuerelemente<\/span><\/b><\/p>\n<p>Danach f&uuml;hren Sie den gleichen Vorgang f&uuml;r das Steuerelement <b>Microsoft ImageList Control, version 6.0 <\/b>aus.<\/p>\n<p>Legen Sie f&uuml;r dieses Steuerelement den Namen <b>ctlImageList <\/b>fest und f&uuml;r das <b>TreeView<\/b>-Steuerelement den Namen <b>ctlTreeView<\/b>. Ziehen Sie das <b>TreeView<\/b>-Steuerelement so auf, dass es sich am linken Rand des Formulars befindet (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_02\/pic_1293_003.png\" alt=\"Die beiden neuen Steuerelemente im Formular\" width=\"424,7115\" height=\"566,6575\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Die beiden neuen Steuerelemente im Formular<\/span><\/b><\/p>\n<h2>Icons zu ImageList-Steuerelement hinzuf&uuml;gen<\/h2>\n<p>Danach f&uuml;gen wir das zun&auml;chst zu verwendende Icon zum <b>ImageList<\/b>-Steuerelement hinzu. Dazu klicken Sie doppelt auf das Steuerelement und erhalten den Dialog <b>Eigenschaften von ImageListCtrl<\/b>. Hier stellen Sie die Bildgr&ouml;&szlig;e auf der Registerseite <b>General <\/b>auf <b>16 x 16 <\/b>ein (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_02\/pic_1293_004.png\" alt=\"Festlegen der Icon-Gr&ouml;&szlig;e\" width=\"424,7115\" height=\"325,7187\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Festlegen der Icon-Gr&ouml;&szlig;e<\/span><\/b><\/p>\n<p>Danach wechseln Sie auf die Registerseite <b>Images <\/b>und klicken dort auf die Schaltfl&auml;che <b>Insert Picture&#8230;<\/b>, was einen <b>Dateiauswahl<\/b>-Dialog &ouml;ffnet.<\/p>\n<p>Hier f&uuml;gen Sie nacheinander zwei Icons ein, die einen geschlossenen und einen ge&ouml;ffneten Ordner anzeigen (siehe Bild 5). F&uuml;r diese beiden Elemente legen Sie im Feld <b>Key <\/b>die Schl&uuml;ssel <b>folder_closed <\/b>und <b>folder_open <\/b>fest.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_02\/pic_1293_005.png\" alt=\"Hinzuf&uuml;gen und benennen der Icons\" width=\"424,7115\" height=\"325,7187\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Hinzuf&uuml;gen und benennen der Icons<\/span><\/b><\/p>\n<h2>Einstellungen f&uuml;r das TreeView-Steuerelement<\/h2>\n<p>Danach nehmen wir die Einstellungen f&uuml;r das <b>TreeView<\/b>-Steuerelement vor. Das erledigen wir in der Regel per VBA, weil sich so ein Satz von Einstellungen recht leicht von einer L&ouml;sung zur n&auml;chsten &uuml;bertragen l&auml;sst &#8211; das geht schneller, als wenn Sie die Einstellungen jedes Mal erneut im Eigenschaften-Fenster erledigen.<\/p>\n<p>Die Einstellungen nehmen wir in einer eigenen Prozedur vor, die wir <b>InitializeTreeView <\/b>nennen. Diese rufen wir in der Ereignisprozedur auf, die beim Laden des Formulars ausgel&ouml;st wird:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     InitializeTreeView\r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur <b>InitializeTreeView<\/b> sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>InitializeTreeView()\r\n     <span style=\"color:blue;\">Dim <\/span>objTreeView<span style=\"color:blue;\"> As <\/span>MSComctlLib.TreeView\r\n     <span style=\"color:blue;\">Set<\/span> objTreeView = Me!ctlTreeView.Object\r\n     <span style=\"color:blue;\">With<\/span> objTreeView\r\n         .Appearance = ccFlat\r\n         .BorderStyle = ccNone\r\n         .Font.Name = \"Calibri\"\r\n         .Font.Size = 9\r\n         .Indentation = 200\r\n         <span style=\"color:blue;\">Set<\/span> .ImageList = Me!ctlImageList.Object\r\n         .LineStyle = tvwRootLines\r\n         .Style = tvwTreelinesPlusMinusPictureText\r\n         .Nodes.Clear\r\n         FillTreeView objTreeView\r\n         ExpandTreeViewNodes objTreeView\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Sie f&uuml;llt zun&auml;chst die Variable <b>objTreeView <\/b>mit einem Verweis auf das <b>TreeView<\/b>-Steuerelement. Dann stellt sie einige Eigenschaften f&uuml;r das so referenzierte <b>TreeView<\/b>-Steuerelement ein. <b>Appearance <\/b>gibt an, ob es in einer 3D-Ansicht oder flach angezeigt werden soll.<\/p>\n<p>Mit <b>BorderStyle <\/b>legen wir fest, dass kein Rahmen erscheinen soll &#8211; wenn, dann definieren wir diesen &uuml;ber die Steuerelementeigenschaften des Containers f&uuml;r das ActiveX-Steuerelement. Mit <b>Font <\/b>referenzieren wir das <b>Font<\/b>-Objekt, mit dessen Eigenschaften <b>Name <\/b>und <b>Size <\/b>wir die Schriftart und die Schriftgr&ouml;&szlig;e einstellen.<\/p>\n<p>Den Standardeinzug reduzieren wir mit der Eigenschaft <b>Indentation <\/b>auf den Wert <b>200 <\/b>(standardm&auml;&szlig;ig <b>567<\/b>). Die Eigenschaft <b>ImageList <\/b>legt das zu verwendende <b>ImageList<\/b>-Steuerelement fest, aus dem die Icons f&uuml;r die <b>TreeView<\/b>-Elemente bezogen werden. Hier m&uuml;ssen wir wie beim <b>TreeView<\/b>-Steuerelement mit <b>Object <\/b>auf das im ActiveX-Container enthaltene Steuerelement zugreifen. <b>LineStyle <\/b>gibt mit dem Wert <b>tvwRootLines <\/b>an, dass wir schon f&uuml;r die Root-Elemente Linien und somit auch Plus\/Minus-Zeichen anzeigen wollen. Und mit <b>Style <\/b>und dem Wert <b>tvwTreelinesPlusMinusPictureText <\/b>bestimmen wir, dass Linien, Plus\/Minus-Zeichen, Icons und Text f&uuml;r die einzelnen Elemente angezeigt werden sollen &#8211; also das komplette Programm.<\/p>\n<p>Schlie&szlig;lich leeren wir die <b>Nodes<\/b>-Auflistung des Steuerelements, damit eventuell bei einer fr&uuml;heren Anzeige noch verbliebene Elemente verschwinden und rufen die Prozedur <b>FillTreeView <\/b>auf, der wir den Verweis auf das zu f&uuml;llende <b>TreeView<\/b>-Steuerelement &uuml;bergeben. Nachdem dies geschehen ist, wollen wir noch den Eingeklappt\/Ausgeklappt-Zustand der Elemente wiederherstellen, der vor dem letzten Schlie&szlig;en des Formulars Bestand hatte. Das erledigen wir mit der Prozedur <b>ExpandTreeViewNodes<\/b>, dem wir ebenfalls einen Verweis auf das <b>TreeView<\/b>-Steuerelement &uuml;bergeben.<\/p>\n<h2>F&uuml;llen des TreeView-Steuerelements mit den Outlook-Ordner<\/h2>\n<p>Die Prozedur <b>FillTreeView <\/b>nimmt mit dem Parameter <b>objTreeView <\/b>einen Verweis auf das zu f&uuml;llende <b>TreeView<\/b>-Steuerelement entgegen (siehe Listing 1). Sie referenziert eine neue oder die aktive Outlook-Instanz mit der Variablen <b>objOutlook <\/b>und weist der Variablen <b>objNamespace <\/b>dann mit der <b>GetNamespace<\/b>-Methode den MAPI-Namespace zu. Anschlie&szlig;end durchl&auml;uft sie alle <b>Folder<\/b>-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&uuml;r die eine eigene <b>.pst<\/b>-Datei angelegt wurde. Diese <b>Folder<\/b>-Objekte durchl&auml;uft die Prozedur in einer <b>For Each<\/b>-Schleife, wobei sie das jeweilige Objekt mit der Variablen <b>objFolder <\/b>referenziert.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>FillTreeView(objTreeView<span style=\"color:blue;\"> As <\/span>MSComctlLib.TreeView)\r\n     <span style=\"color:blue;\">Dim <\/span>objOutlook<span style=\"color:blue;\"> As <\/span>Outlook.Application\r\n     <span style=\"color:blue;\">Dim <\/span>objNamespace<span style=\"color:blue;\"> As <\/span>Outlook.Namespace\r\n     <span style=\"color:blue;\">Dim <\/span>objFolder<span style=\"color:blue;\"> As <\/span>Outlook.Folder\r\n     <span style=\"color:blue;\">Dim <\/span>objNode<span style=\"color:blue;\"> As <\/span>MSComctlLib.Node\r\n     <span style=\"color:blue;\">Set<\/span> objOutlook = <span style=\"color:blue;\">New<\/span> Outlook.Application\r\n     <span style=\"color:blue;\">Set<\/span> objNamespace = objOutlook.GetNamespace(\"MAPI\")\r\n     For Each objFolder In objNamespace.Folders\r\n         <span style=\"color:blue;\">If <\/span>objFolder.DefaultItemType = olMailItem<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> objNode = objTreeView.Nodes.Add(, , objFolder.FolderPath, objFolder.Name, \"folder_closed\")\r\n             FillNode_Rek objTreeView, objNode, objFolder\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> objFolder\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: TreeView-Steuerelement f&uuml;llen<\/span><\/b><\/p>\n<p>Innerhalb der Schleife pr&uuml;ft die Prozedur den Typ der standardm&auml;&szlig;ig in diesem Ordner enthaltenen Elemente. Die mit der Eigenschaft <b>DefaultItemType <\/b>ermittelte Einstellung soll in diesem Fall <b>olMailItem <\/b>lauten, da wir nur die Mailordner anzeigen wollen.<\/p>\n<p><!--30percent--><\/p>\n<p>Handelt es sich um einen Ordner f&uuml;r E-Mails, legt die Prozedur f&uuml;r diesen ein neues <b>Node<\/b>-Element im <b>TreeView<\/b>-Steuerelement an und referenziert dieses mit der Variablen <b>objNode<\/b>. Das Anlegen erledigen wir mit der <b>Add<\/b>-Methode der <b>Nodes<\/b>-Auflistung des Steuerelements. Dieser &uuml;bergeben wir f&uuml;r den dritten Parameter den Wert der Eigenschaft <b>FolderPath <\/b>des Ordners, also beispielsweise <b>\/\/Outlook<\/b>. Dieser Parameter nimmt den Wert f&uuml;r die Eigenschaft <b>Key <\/b>auf. &Uuml;ber den Schl&uuml;ssel legen wir einen eindeutigen Bezeichner f&uuml;r jedes Element im <b>TreeView<\/b>-Steuerelement fest. Daher eignet sich der Wert der Eigenschaft <b>FolderPath <\/b>ausgezeichnet &#8211; dieser ist f&uuml;r jeden Ordner in Outlook eindeutig. Der vierte Parameter legt den Wert der Eigenschaft <b>Name <\/b>fest. Hier &uuml;bergeben wir auch den Namen des jeweiligen Ordners. Der f&uuml;nfte Parameter schlie&szlig;lich erwartet die Angabe des Schl&uuml;ssels f&uuml;r das f&uuml;r dieses Element anzuzeigende Icon aus dem <b>ImageList<\/b>-Steuerelement. Dieses soll f&uuml;r alle Elemente zun&auml;chst <b>folder_closed <\/b>lauten.<\/p>\n<p>Damit f&uuml;llen wir allerdings zun&auml;chst nur die oberste Ebene des <b>TreeView<\/b>-Steuerelements. Um die darunter liegenden Ebenen k&uuml;mmern wir uns in einer weiteren Prozedur namens <b>FillNode_Rek<\/b>. Diese ist, wie der Name schon andeutet, eine rekursiv definierte Prozedur, die sich selbst aufruft. Der Prozedur &uuml;bergeben wir Verweise auf das <b>TreeView<\/b>-Steuerelement, auf das soeben angelegte Node-Element sowie auf den Ordner, f&uuml;r den das Node-Element angelegt wurde.<\/p>\n<p>Auf diese Weise durchlaufen wir alle Elemente der ersten Ebene des MAPI-Namespace, die <b>MailItem<\/b>-Elemente enthalten.<\/p>\n<h2>Rekursives F&uuml;llen f&uuml;r die untergeordneten Ordner<\/h2>\n<p>Die Prozedur <b>FillNode_Rek <\/b>ist eine rekursiv definierte Prozedur, die folgende Parameter erwartet:<\/p>\n<ul>\n<li><b>objTreeView<\/b>: Verweis auf das zu f&uuml;llende <b>TreeView<\/b>-Steuerelement<\/li>\n<li><b>objParentNode<\/b>: Verweis auf das <b>Node<\/b>-Element, unter dem die neuen Elemente angelegt werden sollen<\/li>\n<li><b>objParentFolder<\/b>: Outlook-Folder, dessen Unterordner dem <b>Node<\/b>-Element aus <b>objParentNode <\/b>hinzugef&uuml;gt werden sollen.<\/li>\n<\/ul>\n<p>Sie finden die Prozedur in Listing 2.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>FillNode_Rek(objTreeView<span style=\"color:blue;\"> As <\/span>MSComctlLib.TreeView, objParentNode<span style=\"color:blue;\"> As <\/span>MSComctlLib.Node, _\r\n         objParentFolder<span style=\"color:blue;\"> As <\/span>Outlook.Folder)\r\n     <span style=\"color:blue;\">Dim <\/span>objFolder<span style=\"color:blue;\"> As <\/span>Outlook.Folder\r\n     <span style=\"color:blue;\">Dim <\/span>objNode<span style=\"color:blue;\"> As <\/span>MSComctlLib.Node\r\n     For Each objFolder In objParentFolder.Folders\r\n         <span style=\"color:blue;\">If <\/span>objFolder.DefaultItemType = olMailItem<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> objNode = objTreeView.Nodes.Add(objParentFolder.FolderPath, tvwChild, objFolder.FolderPath, _\r\n                 objFolder.Name, \"folder_closed\")\r\n             FillNode_Rek objTreeView, objNode, objFolder\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> objFolder\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Unterelemente des TreeView-Steuerelements f&uuml;llen<\/span><\/b><\/p>\n<p>Die Prozedur definiert noch Elemente der Typen <b>Outlook.Folder <\/b>und <b>MSComctlLib.Node<\/b>, welche zum Durchlaufen der Unterordner des mit <b>objParentFolder <\/b>&uuml;bergebenen Ordners und zum Anlegen der neuen <b>Node<\/b>-Elemente dienen.<\/p>\n<p>In einer <b>For Each<\/b>-Schleife durchl&auml;uft die Prozedur alle <b>Folder<\/b>-Objekte des mit <b>objParentFolder <\/b>gelieferten Ordners. Darin pr&uuml;ft die Prozedur wieder, ob es sich bei dem Unterordner um einen E-Mail-Ordner handelt. Ist das der Fall, legt sie ein neues Element f&uuml;r diesen Ordner unterhalb des mit <b>objParentNode <\/b>&uuml;bergebenen <b>Node<\/b>-Elements an. Dabei verwendet sie wieder die <b>Add<\/b>-Methode der <b>Nodes<\/b>-Auflistung des <b>TreeView<\/b>-Steuerelements aus <b>objTreeView<\/b>. Diesmal werden auch die ersten beiden Parameter der <b>Add<\/b>-Methode verwendet.<\/p>\n<p>Der erste nimmt den <b>Key<\/b>-Wert des <b>Node<\/b>-Elements entgegen, zu dem das neue Element in einer bestimmten Relation angelegt werden soll (hier mit <b>objParentFolder.FolderPath<\/b> angegeben &#8211; wir h&auml;tten auch <b>objParentNode.Key <\/b>verwenden k&ouml;nnen). Diese Relation geben wir mit dem zweiten Parameter der <b>Add<\/b>-Methode an. Da das neue Element dem mit <b>objParentNode <\/b>angegebenen Element untergeordnet werden soll, stellen wir den zweiten Parameter auf den Wert <b>tvwChild <\/b>ein.<\/p>\n<p>Der dritte Parameter legt wieder den <b>Key<\/b>-Wert f&uuml;r das neue Element fest, den wir wieder mit <b>objFolder.FolderPath <\/b>ermitteln. Dem vierten Parameter &uuml;bergeben wir den Namen des Ordners (<b>objFolder.Name<\/b>) und dem f&uuml;nften wieder das anzuzeigende Icon mit <b>folder_closed<\/b>.<\/p>\n<p>Nachdem wir das neue Element auf diese Weise angelegt haben, rufen wir f&uuml;r dieses gleich wieder die <b>FillNode_Rek<\/b>-Prozedur auf, um eventuell darunter befindliche E-Mail-Ordner in Form von Eintr&auml;gen im <b>TreeView<\/b>-Steuerelement hinzuzuf&uuml;gen.<\/p>\n<p>Nachdem auf diese Weise alle Elemente durchlaufen und die Unterelemente aller Ebenen in Form von <b>Node<\/b>-Elementen zum <b>TreeView<\/b>-Steuerelement hinzugef&uuml;gt wurden, erhalten wir beispielsweise die Ansicht aus Bild 6.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_02\/pic_1293_006.png\" alt=\"TreeView-Steuerelement mit Outlook-Ordnern\" width=\"424,7115\" height=\"571,43\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: TreeView-Steuerelement mit Outlook-Ordnern<\/span><\/b><\/p>\n<h2>Icons f&uuml;r ge&ouml;ffnete Elemente anpassen<\/h2>\n<p>Weiter oben haben wir f&uuml;r das <b>ImageList<\/b>-Steuerelement gleich zwei Ordner-Icons hinterlegt &#8211; eines mit einem geschlossenen und eines mit einem ge&ouml;ffneten Ordner. Hier finden wir jedoch bisher nur das Icon mit dem geschlossenen Ordner vor. F&uuml;r Ordner, deren Untereintr&auml;ge angezeigt werden, wollen wir jedoch das Icon mit dem ge&ouml;ffneten Ordner anzeigen.<\/p>\n<p>Das k&ouml;nnen wir schnell realisieren, indem wir zwei Ereignisprozeduren anlegen, die beim Ein- und Ausklappen eines <b>Node<\/b>-Elements ausgel&ouml;st werden. Um Ereignisprozeduren f&uuml;r ein ActiveX-Steuerelement zu implementieren, w&auml;hlen Sie im VBA-Editor im Code-Fenster des Klassenmoduls des entsprechenden Formulars im linken Kombinationsfeld den Namen des <b>TreeView<\/b>-Steuerelements aus. Im rechten Kombinationsfeld finden Sie dann alle Ereignisse f&uuml;r dieses Steuerelement vor, unter anderem auch die beiden Ereignisse <b>Collapse <\/b>und <b>Expand<\/b>. W&auml;hlen Sie diese aus, legt der VBA-Editor automatisch leere Ereignisprozeduren f&uuml;r diese Ereignisse an (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_02\/pic_1293_007.png\" alt=\"Anlegen von Ereignisprozeduren f&uuml;r das TreeView-Steuerelement\" width=\"649,559\" height=\"408,0562\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Anlegen von Ereignisprozeduren f&uuml;r das TreeView-Steuerelement<\/span><\/b><\/p>\n<p>Damit das <b>TreeView<\/b>-Steuerelement beim Ein- und Ausklappen das jeweils gew&uuml;nschte Icon anzeigt, brauchen Sie nur jeweils eine Anweisung zu den beiden Ereignisprozeduren hinzuzuf&uuml;gen. Damit weisen Sie der Eigenschaft <b>Image <\/b>des mit dem Parameter <b>Node <\/b>gelieferten <b>Node<\/b>-Elements den Namen des anzuzeigenden Icons zu, also <b>folder_closed <\/b>oder <b>folder_open<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>ctlTreeView_Collapse(ByVal Node<span style=\"color:blue;\"> As Object<\/span>)\r\n     Node.Image = \"folder_closed\"\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>ctlTreeView_Expand(ByVal Node<span style=\"color:blue;\"> As Object<\/span>)\r\n     Node.Image = \"folder_open\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit erhalten wir dann die als ge&ouml;ffnet angezeigten Ordner wie in Bild 8.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_02\/pic_1293_008.png\" alt=\"Ge&ouml;ffnete Ordner mit eigenen Icons\" width=\"424,7115\" height=\"408,3239\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Ge&ouml;ffnete Ordner mit eigenen Icons<\/span><\/b><\/p>\n<h2>Eingeklappt\/Ausgeklappt-Zustand der Nodes speichern<\/h2>\n<p>Wenn der Benutzer das Formular nun schlie&szlig;t und es wieder &ouml;ffnet, werden allerdings wieder nur die Elemente der obersten Ebene angezeigt &#8211; wenn er einen bestimmten untergeordneten Ordner sehen m&ouml;chte, muss er sich erst wieder durch die Hierarchie klicken.<\/p>\n<p>Wir m&ouml;chten aber erreichen, dass der Zustand der Eigenschaft <b>Expanded <\/b>nach dem Schlie&szlig;en und erneuten &Ouml;ffnen des Formulars wiederhergestellt wird. Dazu brauchen wir eine M&ouml;glichkeit, diesen Zustand zu speichern. Meistens stammen die Daten, die in einem <b>TreeView<\/b>-Steuerelement angezeigt werden, aus einer oder mehreren hierarchisch verkn&uuml;pften Tabellen einer Access-Datenbank. In diesem Fall kann man die jeweiligen Tabellen mit einem Feld erg&auml;nzen, das den <b>Expanded<\/b>-Zustand der Elemente direkt in der Tabelle speichert. Dann kann man diesen beim erneuten F&uuml;llen des <b>TreeView<\/b>-Steuerelements direkt auslesen und die <b>Expanded<\/b>-Eigenschaft direkt einstellen sowie das richtige Icon f&uuml;r das Element festlegen.<\/p>\n<p>In unserem Fall stammen die Daten aber nicht aus Access-Tabellen, sondern aus einer externen Anwendung. Wir ben&ouml;tigen also eine alternative M&ouml;glichkeit, um die Daten &uuml;ber den <b>Expanded<\/b>-Zustand zu speichern. Dazu legen wir eine neue Tabelle an, die wir <b>tblExpandedTreeViewNodes <\/b>nennen. Darin wollen wir nicht einfach alle Elemente des <b>TreeView<\/b>-Steuerelements speichern und in einem <b>Ja\/Nein<\/b>-Feld angeben, welche davon aktuell als <b>Expanded <\/b>markiert sind. Stattdessen wollen wir einfach nur die Felder dort in je einem Datensatz speichern, die aktuell als <b>Expanded <\/b>markiert sind. Wir ben&ouml;tigen also nur ein Prim&auml;rschl&uuml;sselfeld sowie ein Feld, welches eine eindeutige Bezeichnung des ausgeklappten Ordners aufnehmen soll. Dazu bietet sich der Wert der Eigenschaft <b>Key <\/b>des <b>Node<\/b>-Elements an, der auch dem Wert der Eigenschaft <b>FolderPath <\/b>des <b>Folder<\/b>-Objekts aus Outlook entspricht.<\/p>\n<p>Der Entwurf dieser Tabelle sieht wie in Bild 9 aus. Wichtig ist hier insbesondere, dass wir f&uuml;r das Feld <b>ExpandedTreeViewNodeKey <\/b>einen eindeutigen Index festlegen. Dazu stellen Sie die Eigenschaft <b>Indiziert <\/b>f&uuml;r dieses Feld auf den Wert <b>Ja (Ohne Duplikate) <\/b>fest. Den Grund erl&auml;utern wir weiter unten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_02\/pic_1293_009.png\" alt=\"Tabelle zum Speichern des Expanded-Zustands von Folder-Elementen\" width=\"649,559\" height=\"346,3092\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Tabelle zum Speichern des Expanded-Zustands von Folder-Elementen<\/span><\/b><\/p>\n<h2>Ausgeklappte Elemente in die Tabelle tblExpandedTreeViewNodes eintragen<\/h2>\n<p>Damit beim Ausklappen eines Elements ein Eintrag in der Tabelle <b>tblExpandedTreeViewNodes <\/b>angelegt wird, erweitern wir die Ereignisprozedur, die durch das Ausklappen eines Elements ausgel&ouml;st wird, wie in Listing 3.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>ctlTreeView_Expand(ByVal Node<span style=\"color:blue;\"> As Object<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     Node.Image = \"folder_open\"\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     db.Execute \"INSERT INTO tblExpandedTreeViewNodes(ExpandedTreeViewNodeKey) VALUES(''\" & Node.Key & \"'')\", dbFailOnError\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Aktionen beim Ausklappen eines Node-Elements<\/span><\/b><\/p>\n<p>Hier erstellen wir einen Verweis auf das <b>Database<\/b>-Objekt der aktuellen Datenbank und speichern diesen in der Variable <b>db<\/b>. Dann stellen wir wie gehabt das anzuzeigende Icon des ausgeklappten <b>Node<\/b>-Elements mit der Eigenschaft <b>Image <\/b>auf <b>folder_open <\/b>ein.<\/p>\n<p>Dann deaktivieren wir die eingebaute Fehlerbehandlung, denn nun folgt eine Anweisung, die eventuell einen Fehler ausl&ouml;sen k&ouml;nnte: Wir f&uuml;gen der Tabelle <b>tblExpandedTreeViewNodes <\/b>einen neuen Eintrag hinzu, der im Feld <b>ExpandedTreeViewNodeKey <\/b>den Wert der Eigenschaft <b>Key <\/b>des ausgeklappten <b>Node<\/b>-Elements erh&auml;lt.<\/p>\n<p>Sollte bereits ein Datensatz mit diesem Wert vorhanden sein, l&ouml;st dies den Fehler <b>3022 <\/b>aus, weil der eindeutige Index verletzt wird, wenn Sie diesen Wert erneut einf&uuml;gen. Dadurch, das wir die Fehlerbehandlung deaktivieren, wird dieser Fehler nicht behandelt und der neue Datensatz schlicht nicht angelegt.<\/p>\n<p>Nachdem wir auf diese Weise einige Ordner ge&ouml;ffnet haben, sieht die Tabelle <b>tblExpandedTreeViewNodes <\/b>beispielsweise wie in Bild 10 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_02\/pic_1293_010.png\" alt=\"Eintr&auml;ge f&uuml;r die ge&ouml;ffneten Order\" width=\"599,593\" height=\"310,9359\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Eintr&auml;ge f&uuml;r die ge&ouml;ffneten Order<\/span><\/b><\/p>\n<h2>Eingeklappte Elemente aus der Tabelle tblExpandedTreeViewNodes entfernen<\/h2>\n<p>Nun m&uuml;ssen wir noch daf&uuml;r sorgen, dass ein Eintrag in der Tabelle <b>tblExpandedTreeViewNodes <\/b>auch wieder entfernt wird, wenn der Benutzer den betreffenden Ordner im <b>TreeView<\/b>-Steuerelement wieder einklappt. Dazu erweitern wir die Ereignisprozedur, die durch das Ereignis <b>Collapse <\/b>ausgel&ouml;st wird. Dieser f&uuml;gen wir ebenfalls die Anweisung zum Referenzieren des <b>Database<\/b>-Objekts der aktuellen Datenbank zu. Die mit der <b>Execute<\/b>-Anweisung des mit <b>db <\/b>referenzierten <b>Database<\/b>-Objekts ausgef&uuml;hrte SQL-Anweisung l&ouml;scht jedoch nun einen Datensatz, und zwar den, der im Feld <b>ExpandTreeViewNodeKey <\/b>den Wert der Eigenschaft <b>Key <\/b>des mit dem Parameter <b>Node <\/b>&uuml;bergebenen <b>Node<\/b>-Elements enth&auml;lt. Die Prozedur beh&auml;lt au&szlig;erdem die Anweisung, welche dem <b>Node<\/b>-Element wieder das Icon mit dem Schl&uuml;ssel <b>folder_closed <\/b>zuweist. Die Prozedur sieht nun wie in Listing 4 aus.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>ctlTreeView_Collapse(ByVal Node<span style=\"color:blue;\"> As Object<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     Node.Image = \"folder_closed\"\r\n     db.Execute \"DELETE FROM tblExpandedTreeViewNodes WHERE ExpandedTreeViewNodeKey = ''\" & Node.Key & \"''\", dbFailOnError\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Aktionen beim Einklappen eines Node-Elements<\/span><\/b><\/p>\n<h2>Zustand der TreeView-Eintr&auml;ge beim &Ouml;ffnen wiederherstellen<\/h2>\n<p>Bisher haben wir nur den Zustand der <b>Node<\/b>-Elemente beim Ein- und Ausklappen erfasst und die Schl&uuml;ssel der aktuell ausgeklappten Elemente in der Tabelle <b>tblExpandedTreeViewNodes <\/b>gespeichert.<\/p>\n<p>Nun wollen wir das <b>TreeView<\/b>-Steuerelement noch so weitern, dass es beim &Ouml;ffnen des Formulars die in der Tabelle <b>tblExpandedTreeViewNodes <\/b>enthaltenen <b>Node<\/b>-Elemente ausgeklappt anzeigt.<\/p>\n<p>Die dazu verwendete Prozedur <b>ExpandTreeViewNodes<\/b>, die wir in der bereits weiter oben beschriebenen Ereignisprozedur <b>InitializeTreeview <\/b>aufrufen, finden Sie in Listing 5. Die Prozedur erwartet mit dem Parameter <b>objTreeView<\/b> einen Verweis auf das zu bearbeitende <b>TreeView<\/b>-Steuerelement.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>ExpandTreeViewNodes(objTreeView<span style=\"color:blue;\"> As <\/span>MSComctlLib.TreeView)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblExpandedTreeViewNodes\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         objTreeView.Nodes(CStr(rst!ExpandedTreeViewNodeKey)).Expanded = <span style=\"color:blue;\">True<\/span>\r\n         Select Case Err.Number\r\n             <span style=\"color:blue;\">Case <\/span>35601\r\n                 rst.Delete\r\n             <span style=\"color:blue;\">Case Else<\/span>\r\n                 <span style=\"color:blue;\">MsgBox<\/span> \"Fehler: \" & Err.Description\r\n         <span style=\"color:blue;\">End Select<\/span>\r\n         <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Ausklappen der daf&uuml;r vorgesehenen Node-Elemente beim &Ouml;ffnen des Formulars<\/span><\/b><\/p>\n<p>Die Prozedur erstellt eine Verweis auf das <b>Database<\/b>-Objekt der aktuellen Datenbank sowie ein Recordset auf Basis der Tabelle <b>tblExpandedTreeViewNodes<\/b>. Die Eintr&auml;ge des mit <b>rst <\/b>referenzierten Recordsets durchl&auml;uft die Prozedur dann in einer <b>Do While<\/b>-Schleife. Hier schaltet sie die eingebaute Fehlerbehandlung aus und stellt dann f&uuml;r ein <b>Node<\/b>-Element der Auflistung <b>Nodes<\/b>, das &uuml;ber den Index aus dem Tabellenfeld <b>ExpandedTreeViewNodeKey <\/b>referenziert werden kann, den Wert der Eigenschaft <b>Expanded <\/b>auf <b>True <\/b>ein.<\/p>\n<p>Dabei kann der Fehler mit der Nummer <b>35601<\/b> auftreten, wenn das gesuchte Element nicht gefunden wird. Deshalb untersuchen wir in einer <b>Select Case<\/b>-Bedingung den Wert der Fehlernummer aus <b>Err.Number<\/b>. Hat dieser den Wert <b>35601<\/b>, ist also das gesuchte Element nicht vorhanden, soll der entsprechende Datensatz direkt gel&ouml;scht werden.<\/p>\n<p>Das erledigen wir direkt mit der <b>Delete<\/b>-Methode des Recordsets f&uuml;r den aktuellen Datensatz. Anderenfalls wird das aktuelle Element durch Einstellen der <b>Expanded<\/b>-Eigenschaft nun ausgeklappt angezeigt.<\/p>\n<p>F&uuml;r die korrekte Referenzierung des <b>Node<\/b>-Elements aus der <b>Nodes<\/b>-Auflistung m&uuml;ssen Sie &uuml;brigens den Wert des Feldes <b>ExpandedTreeViewNodeKey <\/b>nochmals explizit in einen String konvertieren.<\/p>\n<h2>Anklicken eines der Ordner-Elemente<\/h2>\n<p>Der Sinn der Anzeige der Outlook-Ordner ist die Auswahl eines Ordners, dessen E-Mails in einem weiteren Steuerelement angezeigt werden sollen. Dazu legen wir eine weitere Ereignisprozedur an, die durch das Ereignis <b>NodeClick <\/b>ausgel&ouml;st wird:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>ctlTreeView_NodeClick(ByVal Node<span style=\"color:blue;\"> As Object<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objNode<span style=\"color:blue;\"> As <\/span>MSComctlLib.Node\r\n     <span style=\"color:blue;\">Set<\/span> objNode = Node\r\n     objView.Folder = objNode.Key\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Steuerelement zur Anzeige der E-Mails aus Outlook wird mit der Variablen <b>objView<\/b> referenziert. Seine Eigenschaft <b>Folder <\/b>stellen wir auf den Schl&uuml;ssel des mit dem Parameter &uuml;bergebenen <b>Node<\/b>-Elements ein.<\/p>\n<p>Alles weitere zu diesem Steuerelement und wie es die E-Mails aus dem ausgew&auml;hlten Ordner anzeigen soll, erfahren Sie im Beitrag <b>E-Mails verwalten mit dem Outlook View Control <\/b>(<b>www.access-im-unternehmen.de\/1295<\/b>).<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>OutlookInAccessIntegrieren.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/5EF46A82-D718-475B-B86D-C93599342EE0\/aiu_1293.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Beitrag &#8222;Outlook-Folder in Access anzeigen&#8220; 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 &#8222;E-Mails verwalten mit dem Outlook View Control&#8220; wollen wir dies ein wenig professioneller gestalten und die Outlook-Ordner in einem TreeView-Steuerelement anzeigen. Wie das gelingt, erfahren Sie im vorliegenden Beitrag.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022021,662021,44000026],"tags":[],"class_list":["post-55001293","post","type-post","status-publish","format-standard","hentry","category-66022021","category-662021","category-Interaktiv"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>TreeView f&uuml;r Outlook-Ordner - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TreeView f&uuml;r Outlook-Ordner\" \/>\n<meta property=\"og:description\" content=\"Im Beitrag &quot;Outlook-Folder in Access anzeigen&quot; 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 &quot;E-Mails verwalten mit dem Outlook View Control&quot; wollen wir dies ein wenig professioneller gestalten und die Outlook-Ordner in einem TreeView-Steuerelement anzeigen. Wie das gelingt, erfahren Sie im vorliegenden Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-31T10:17:57+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/58dbc9bfdafc422da6abc6b0560a7eff\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"17\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"TreeView f&uuml;r Outlook-Ordner\",\"datePublished\":\"2021-07-31T10:17:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/\"},\"wordCount\":3038,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/58dbc9bfdafc422da6abc6b0560a7eff\",\"articleSection\":[\"2\\\/2021\",\"2021\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/\",\"name\":\"TreeView f&uuml;r Outlook-Ordner - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/58dbc9bfdafc422da6abc6b0560a7eff\",\"datePublished\":\"2021-07-31T10:17:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/58dbc9bfdafc422da6abc6b0560a7eff\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/58dbc9bfdafc422da6abc6b0560a7eff\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_fuer_OutlookOrdner\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TreeView f&uuml;r Outlook-Ordner\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"TreeView f&uuml;r Outlook-Ordner - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/","og_locale":"de_DE","og_type":"article","og_title":"TreeView f&uuml;r Outlook-Ordner","og_description":"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.","og_url":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-07-31T10:17:57+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/58dbc9bfdafc422da6abc6b0560a7eff","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"TreeView f&uuml;r Outlook-Ordner","datePublished":"2021-07-31T10:17:57+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/"},"wordCount":3038,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/58dbc9bfdafc422da6abc6b0560a7eff","articleSection":["2\/2021","2021","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/","url":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/","name":"TreeView f&uuml;r Outlook-Ordner - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/58dbc9bfdafc422da6abc6b0560a7eff","datePublished":"2021-07-31T10:17:57+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/58dbc9bfdafc422da6abc6b0560a7eff","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/58dbc9bfdafc422da6abc6b0560a7eff"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/TreeView_fuer_OutlookOrdner\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"TreeView f&uuml;r Outlook-Ordner"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001293","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001293"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001293\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001293"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001293"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}