{"id":55001224,"date":"2020-02-01T00:00:00","date_gmt":"2020-07-10T09:39:53","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1224"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Objekte_im_Ribbon_verfuegbar_machen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/","title":{"rendered":"Objekte im Ribbon verf&uuml;gbar machen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/d41f62186fc046db8d4c8a57414c7e23\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Manchmal wird die Liste der Tabellen, Abfragen, Formulare und Co. im Navigationsbereich etwas un&uuml;bersichtlich. Da w&uuml;nscht sich der eine oder andere, dass die wichtigsten Elemente einer Datenbank schnell zur Verf&uuml;gung stehen. Eine M&ouml;glichkeit, das zu erledigen, ist das Ribbon. Wie Sie die dort anzuzeigenden Elemente ausw&auml;hlen und diese dort hinzuf&uuml;gen, zeigt der vorliegende Beitrag.<\/b><\/p>\n<p>Zwar verstummen allm&auml;hlich die Stimmen, die eine R&uuml;ckkehr des Datenbankfensters fordern, aber dass der Navigationsbereich nicht gerade die &uuml;bersichtlichste Variante ist, um Datenbankobjekte anzuzeigen, ist offensichtlich (siehe Bild 1). Auf vielfachen Leserwunsch schauen wir uns daher einmal an, welche M&ouml;glichkeiten es gibt, Elemente wie Tabellen, Abfragen, Formulare, Berichte, Makros und Module &uuml;ber das Ribbon zug&auml;nglich zu machen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_001.png\" alt=\"Navigationsbereich\" width=\"349,7625\" height=\"893,2595\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Navigationsbereich<\/span><\/b><\/p>\n<p>Als Erstes ben&ouml;tigen wir eine Tabelle, in die wir die Elemente des Navigationsbereichs einlesen und der wir ein Feld hinzuf&uuml;gen, mit dem wir angeben, ob das jeweilige Element zus&auml;tzlich zur Anzeige im Navigationsbereich noch im Ribbon erscheinen soll. Dann stellen wir ein Formular zusammen, mit dem wir die Elemente anzeigen und die M&ouml;glichkeit bieten, diese f&uuml;r die Anzeige im Ribbon auszuw&auml;hlen. Schlie&szlig;lich gibt es verschiedene Varianten, um Daten wie die beschriebenen Objekte im Ribbon anzuzeigen. Wir schauen uns die verschiedenen Varianten an und pr&uuml;fen die Machbarkeit und Vor- und Nachteile.<\/p>\n<p><b>Objekte in Tabelle<\/b><\/p>\n<p>Zum Speichern der Objekte wollen wir die Tabelle <b>tblObjekte-In-Ribbon<\/b> verwenden, die im Entwurf wie in Bild 2 aussieht. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_002.png\" alt=\"Tabelle zum Speichern der Objekte\" width=\"549,6265\" height=\"302,4855\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Tabelle zum Speichern der Objekte<\/span><\/b><\/p>\n<p>Die Tabelle verwendet neben dem Prim&auml;rschl&uuml;sselfeld <b>ID <\/b>das Feld <b>Objektname<\/b>, in das wir den Namen der Tabelle, Abfrage et cetera eintragen. F&uuml;r das Feld <b>Objektname <\/b>legen wir &uuml;ber die Eigenschaft <b>Indiziert <\/b>mit dem Wert <b>Ja (Ohne Duplikate) <\/b>einen eindeutigen Index fest. Damit stellen wir sicher, dass jedes Objekt nur einmal zur Tabelle hinzugef&uuml;gt wird.<\/p>\n<p>Das Feld <b>ObjekttypID<\/b> ist verkn&uuml;pft mit der Tabelle <b>tblObjekttypen<\/b>, in der wir die sechs Objekttypen auff&uuml;hren (siehe Bild 3). Das letzte Feld hei&szlig;t <b>InRibbon <\/b>und hat den Datentyp <b>Ja\/Nein<\/b>. Mit diesem Feld legen wir fest, ob das Objekt im Ribbon angezeigt werden soll oder nicht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_003.png\" alt=\"Die verschiedenen Objekttypen in der Tabelle tblObjekttypen\" width=\"424,7115\" height=\"215,1623\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Die verschiedenen Objekttypen in der Tabelle tblObjekttypen<\/span><\/b><\/p>\n<p>Achtung: Die Tabelle muss die Daten genau mit den Prim&auml;rschl&uuml;sselwerten enthalten, wie sie hier abgebildet sind. Sp&auml;ter verwenden wir im Code die Werte von <b>1 <\/b>bis <b>6<\/b>, um Elemente zu referenzieren, die zu einer der Objektkategorien geh&ouml;ren.<\/p>\n<p><b>Prozedur zum Erfassen aller Objekte in der Tabelle<\/b><\/p>\n<p>Schlie&szlig;lich ben&ouml;tigen wir eine Prozedur, mit der wir die Objekte der Datenbank durchlaufen und diese zur Tabelle <b>tblObjekteInRibbon <\/b>hinzuf&uuml;gen.<\/p>\n<p>Diese sieht wie in Listing 1 aus. Die Prozedur deklariert die Variable <b>db<\/b>, die Sie mit einem Verweis auf das <b>Database<\/b>-Objekt der aktuellen Datenbank f&uuml;llt. <b>tdf <\/b>und <b>qdf <\/b>haben die Typen <b>TableDef <\/b>und <b>QueryDef <\/b>und dienen zum Durchlauen der Tabellen und Abfragen.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ObjekteInTabelleSchreiben()\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>tdf<span style=\"color:blue;\"> As <\/span>DAO.TableDef\r\n     <span style=\"color:blue;\">Dim <\/span>qdf<span style=\"color:blue;\"> As <\/span>DAO.QueryDef\r\n     <span style=\"color:blue;\">Dim <\/span>objAccess<span style=\"color:blue;\"> As <\/span>AccessObject\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     For Each tdf In db.TableDefs\r\n         db.Execute \"INSERT INTO tblObjekteInRibbon(Objektname, ObjekttypID) VALUES('\" & tdf.Name & \"', 1)\", dbFailOnError\r\n     <span style=\"color:blue;\">Next<\/span> tdf\r\n     For Each qdf In db.QueryDefs\r\n         db.Execute \"INSERT INTO tblObjekteInRibbon(Objektname, ObjekttypID) VALUES('\" & qdf.Name & \"', 2)\", dbFailOnError\r\n     <span style=\"color:blue;\">Next<\/span> qdf\r\n     For Each objAccess In CurrentProject.AllForms\r\n         db.Execute \"INSERT INTO tblObjekteInRibbon(Objektname, ObjekttypID) VALUES('\" & objAccess.Name _\r\n             & \"', 3)\", dbFailOnError\r\n     <span style=\"color:blue;\">Next<\/span> objAccess\r\n     For Each objAccess In CurrentProject.AllReports\r\n         db.Execute \"INSERT INTO tblObjekteInRibbon(Objektname, ObjekttypID) VALUES('\" & objAccess.Name _\r\n             & \"', 4)\", dbFailOnError\r\n     <span style=\"color:blue;\">Next<\/span> objAccess\r\n     For Each objAccess In CurrentProject.AllMacros\r\n         db.Execute \"INSERT INTO tblObjekteInRibbon(Objektname, ObjekttypID) VALUES('\" & objAccess.Name _\r\n             & \"', 5)\", dbFailOnError\r\n     <span style=\"color:blue;\">Next<\/span> objAccess\r\n     For Each objAccess In CurrentProject.AllModules\r\n         db.Execute \"INSERT INTO tblObjekteInRibbon(Objektname, ObjekttypID) VALUES('\" & objAccess.Name _\r\n             & \"', 6)\", dbFailOnError\r\n     <span style=\"color:blue;\">Next<\/span> objAccess\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Prozedur zum Einlesen aller Access-Objekte in die Tabelle tblObjekteInRibbon<\/span><\/b><\/p>\n<p><b>objAccess <\/b>hat den Typ <b>Access-Object <\/b>und erlaubt das Durchlaufen der Auflistungen <b>AllForms<\/b>, <b>AllReports<\/b>, <b>AllMacros <\/b>und <b>AllModules <\/b>der <b>CurrentProject<\/b>-Klasse.<\/p>\n<p>Die Fehlerbehandlung deaktivieren wir mit <b>On Error Resume Next<\/b>. Der Hintergrund ist, dass beim erneuten Einlesen der Objekte gegebenenfalls vorhandene Elemente gleichen Namens zu Fehlern f&uuml;hren k&ouml;nnen, da der eindeutige Index f&uuml;r das Feld <b>Objektname <\/b>verletzt wird. Dies wollen wir einfach ignorieren und Objekte, deren Namen bereits vorhanden sind, einfach nicht nochmals hinzuf&uuml;gen.<\/p>\n<p>In der ersten <b>For Each<\/b>-Schleife durchl&auml;uft die Prozedur alle Elemente der <b>TableDefs<\/b>-Auflistung des <b>Database<\/b>-Objekts und tr&auml;gt f&uuml;r jedes Element einen neuen Datensatz in die Tabelle <b>tblObjekteInRibbon <\/b>ein.<\/p>\n<p>Dabei wird als <b>Objektname <\/b>der Wert der Eigenschaft <b>Name <\/b>des <b>TableDef<\/b>-Objekts und als <b>ObjekttypID <\/b>der Wert <b>1 <\/b>eingetragen.<\/p>\n<p>Die zweite <b>For Each<\/b>-Schleife erledigt das Gleiche f&uuml;r die Elemente der Auflistung <b>QueryDefs<\/b>. Hier f&uuml;gt sie der Tabelle jedoch f&uuml;r das Feld <b>ObjekttypID <\/b>den Wert <b>2 <\/b>hinzu.<\/p>\n<p>Die dritte bis sechste <b>For Each<\/b>-Schleife der Prozedur verwendet die Auflistungen <b>AllForms<\/b>, <b>AllReports<\/b>, <b>AllMacros <\/b>und <b>AllModules <\/b>des <b>CurrentProject<\/b>-Objekts, um die Formulare, Berichte, Makros und Module der Datenbank zu ermitteln. Dabei nutzen wir jeweils die <b>Name<\/b>-Eigenschaft des <b>AccessObject<\/b>-Elements als Wert f&uuml;r das Feld <b>Objektname<\/b>. F&uuml;r das Feld <b>ObjekttypID <\/b>tragen wir je nach Objekttyp die Werte <b>3<\/b>, <b>4<\/b>, <b>5 <\/b>oder <b>6 <\/b>ein. Das Ergebnis sieht wie in Bild 4 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_004.png\" alt=\"Die Tabelle tblObjekteInRibbon mit den Objekten der Datenbank\" width=\"424,7115\" height=\"382,4243\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Die Tabelle tblObjekteInRibbon mit den Objekten der Datenbank<\/span><\/b><\/p>\n<p><b>Formular zur Auswahl der anzuzeigenden Elemente<\/b><\/p>\n<p>Nun ben&ouml;tigen wir ein Formular, dass die Elemente der Datenbank in alphabetischer Reihenfolge und nach Objekttyp aufgeteilt anzeigt und das Markieren der im Ribbon anzuzeigenden Objekte erlaubt. Dazu erstellen wir ein neues Formular namens <b>frmObjekteInRibbon<\/b>. Das Formular soll seine Daten in einem Register-Steuerelement mit sechs Registerseiten anzeigen, die jeweils ein Unterformular enthalten. Das Unterformular soll die Elemente des jeweiligen Objekttyps anzeigen. Da das Unterformular jeder Registerseite die Daten aus der gleichen Tabelle anzeigen soll, die nur unterschiedlich gefiltert werden, ben&ouml;tigen wir nur ein Formular, das dann in den sechs Unterformular-Steuerelementen angezeigt wird.<\/p>\n<p>Wir legen als Erstes das Formular <b>frmObjekteInRibbon <\/b>an und f&uuml;gen das Register-Steuerelement hinzu. Dann w&auml;hlen wir aus dem Kontextmen&uuml; dieses Steuerelements so oft den Eintrag <b>Seite einf&uuml;gen <\/b>aus, bis das Register-Steuerelement sechs Registerseiten enth&auml;lt (siehe Bild 5). Die sechs Registerseiten beschriften wir &uuml;ber die Eigenschaft <b>Beschriftung <\/b>mit <b>Tabellen<\/b>, <b>Abfragen<\/b>, <b>Formulare<\/b>, <b>Berichte<\/b>, <b>Makros <\/b>und <b>Module<\/b>. Die Seiten erhalten die Namen <b>pgeTabellen<\/b>, <b>pgeAbfragen<\/b>, <b>pgeFormulare<\/b>, <b>pgeBerichte<\/b>, <b>pgeMakros <\/b>und <b>pgeModule<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_005.png\" alt=\"Hinzuf&uuml;gen von Registerseiten zum Register-Steuerelement\" width=\"424,7115\" height=\"479,329\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Hinzuf&uuml;gen von Registerseiten zum Register-Steuerelement<\/span><\/b><\/p>\n<p>Das Unterformular <b>sfmObjekteInRibbon <\/b>statten wir mit einer Abfrage namens <b>qryObjekteInRibbonNachObjektname <\/b>als <b>Datensatzquelle <\/b>aus, welche alle Felder der Tabelle <b>tblObjekteInRibbon <\/b>enth&auml;lt und diese nach dem Feld <b>Objektname <\/b>sortiert (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_006.png\" alt=\"Datensatzquelle des Formulars sfmObjekteInTabelle\" width=\"599,593\" height=\"304,0057\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Datensatzquelle des Formulars sfmObjekteInTabelle<\/span><\/b><\/p>\n<p>Wir f&uuml;gen dem Formular die beiden Felder <b>InRibbon <\/b>und <b>Objektname <\/b>der Datensatzquelle hinzu. Au&szlig;erdem stellen wir die Eigenschaft <b>Standardansicht <\/b>auf <b>Datenblatt <\/b>ein.<\/p>\n<p>Danach speichern und schlie&szlig;en Sie das Unterformular <b>sfm-ObjekteInRibbon<\/b>. F&uuml;r das Formular <b>frmObjekteInRibbon <\/b>stellen wir noch die Eigenschaften <b>Datensatzmarkierer<\/b>, <b>Navigationsschaltfl&auml;chen <\/b>und <b>Bildlaufleisten <\/b>auf <b>Nein <\/b>ein und die Eigenschaft <b>Automatisch zentrieren <\/b>auf <b>Ja<\/b>.<\/p>\n<p>Dann folgt ein wenig Kleinarbeit: das Einf&uuml;gen des Unterformulars in das Register-Steuerelement. Hier gibt es zwei M&ouml;glichkeiten:<\/p>\n<ul>\n<li>Entweder wir f&uuml;gen auf jeder Registerseite ein neues Unterformular-Steuerelement ein, das wir dann jeweils nach dem Wert f&uuml;r das Feld <b>ObjekttypID <\/b>filtern, der die Objekte passend zur Beschriftung der Registerseite liefert.<\/li>\n<li>Oder wir platzieren ein Unterformular-Steuerelement in z-Reihenfolge vor dem Register-Steuerelement und &auml;ndern den Filter jeweils bei &Auml;nderung der ausgew&auml;hlten Registerseite.<\/li>\n<\/ul>\n<p>Wer schon einmal auf mehreren Registerseiten ein Steuer-element so eingef&uuml;gt hat, dass es sich beim Bl&auml;ttern im Register immer an der gleichen Position befindet, wei&szlig;, dass das eine langweilige Arbeit ist. Also entscheiden wir uns f&uuml;r die zweite Variante mit nur einem Unterformular, das wir einfach vor dem Register-Steuerelement platzieren. Dazu f&uuml;gen wir dieses zuerst unter oder neben dem Register-Steuerelement ein, entfernen das Beschriftungsfeld und schieben es dann &uuml;ber das Register-Steuerelement (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_007.png\" alt=\"Unterformular-Steuerelement &uuml;ber Register-Steuerelement\" width=\"424,7115\" height=\"330,9545\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Unterformular-Steuerelement &uuml;ber Register-Steuerelement<\/span><\/b><\/p>\n<p>Damit sich beide beim &Auml;ndern der Formulargr&ouml;&szlig;e der Gr&ouml;&szlig;e anpassen, stellen wir die Eigenschaften <b>Horizontaler Anker <\/b>und <b>Vertikaler Anker <\/b>jeweils auf <b>Beide <\/b>ein.<\/p>\n<p>Nun m&uuml;ssen wir nur noch daf&uuml;r sorgen, dass das Unterformular nur noch die Elemente anzeigt, die dem im Register-Steuerelement ausgew&auml;hlten Objekttyp entsprechen. Dazu hinterlegen wir f&uuml;r die Ereigniseigenschaft <b>Bei &Auml;nderung <\/b>des Register-Steuerelements, das wir zuvor noch mit <b>regObjekte <\/b>benennen, die folgende Ereignisprozedur:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>regObjekte_Change()\r\n     <span style=\"color:blue;\">With<\/span> Me!sfmObjekteInRibbon.Form\r\n         .Filter = \"ObjekttypID = \" & Me!regObjekte.Value + 1\r\n         .FilterOn = <span style=\"color:blue;\">True<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p>Diese stellt die Eigenschaft <b>Filter <\/b>des Unterformulars auf einen Ausdruck ein, der den Wert der jeweils ausgew&auml;hlten Registerseite ermittelt, eins hinzuaddiert und diesen mit dem Wert des Feldes <b>ObjekttypID <\/b>gleichsetzt. Dabei kommt dann etwa f&uuml;r die erste Registerseite das folgende Kriterium heraus:<\/p>\n<pre>ObjekttypID = 1<\/pre>\n<p>Wenn wir das Formular nun &ouml;ffnen, erscheinen allerdings zun&auml;chst alle Elemente in der Liste (siehe Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_008.png\" alt=\"Das Unterformular zeigt noch alle Eintr&auml;ge an.\" width=\"424,7115\" height=\"305,5414\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Das Unterformular zeigt noch alle Eintr&auml;ge an.<\/span><\/b><\/p>\n<p>Wenn wir allerdings die Ereignisprozedur regObjekte_Change einmal beim Laden des Formulars aufrufen, erhalten wir auch direkt nach dem &Ouml;ffnen die korrekt gefilterten Elemente (siehe Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_009.png\" alt=\"Objekte gefiltert nach Objekttyp, hier alle Tabellen\" width=\"424,7115\" height=\"305,5414\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Objekte gefiltert nach Objekttyp, hier alle Tabellen<\/span><\/b><\/p>\n<p>Die Ereignisprozedur, die durch das Ereignis <b>Beim Laden <\/b>ausgel&ouml;st wird, sieht dann so aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     regObjekte_Change\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>Verwalten der Objekte<\/b><\/p>\n<p>Wir wollen noch ein paar weitere Elemente hinzuf&uuml;gen, damit der Benutzer die Objekte im Formular einfacher verwalten kann. Die dazu angelegten Schaltfl&auml;chen sehen Sie in Bild 10. Damit die Schaltfl&auml;chen nicht unter den anderen Steuerelementen verschwinden, wenn der Benutzer das Formular nach unten vergr&ouml;&szlig;ert, stellen wir die Eigenschaft <b>Vertikaler Anker <\/b>auf <b>Unten <\/b>ein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_010.png\" alt=\"Objekte verwalten mit zus&auml;tzlichen Schaltfl&auml;chen\" width=\"424,7115\" height=\"329,7339\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Objekte verwalten mit zus&auml;tzlichen Schaltfl&auml;chen<\/span><\/b><\/p>\n<p><b>Alle Objekte l&ouml;schen<\/b><\/p>\n<p>Die Schaltfl&auml;che mit der Beschriftung <b>Alle l&ouml;schen <\/b>hei&szlig;t <b>cmdAlleLoeschen <\/b>und soll alle Datens&auml;tze aus der Tabelle <b>tblObjekteInRibbon <\/b>l&ouml;schen. Auf diese Weise kann der Benutzer die Objekte nach umfangreicheren &Auml;nderungen anschlie&szlig;end wieder neu einlesen. Die Schaltfl&auml;che l&ouml;st beim Anklicken die Ereignisprozedur aus Listing 2 aus. Diese zeigt zun&auml;chst noch eine Meldung an, die den Benutzer darauf hinweist, dass alle Datens&auml;tze gel&ouml;scht werden. Der Benutzer kann dies durch Bet&auml;tigen der <b>Nein<\/b>-Schaltfl&auml;che abwenden. Ansonsten sorgt eine <b>DELETE<\/b>-Abfrage f&uuml;r das L&ouml;schen aller Datens&auml;tze der Tabelle <b>tblObjekteInRibbon<\/b>. Die folgende Anweisung aktualisiert die Anzeige der Daten im Unterformular.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdAlleLoeschen_Click()\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     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">MsgBox<\/span>(\"Dies l&ouml;scht alle Elemente. Diese m&uuml;ssen danach neu eingelesen werden.\", vbYesNo) = vbYes<span style=\"color:blue;\"> Then<\/span>\r\n         db.Execute \"DELETE FROM tblObjekteInRibbon\", dbFailOnError\r\n         Me!sfmObjekteInRibbon.Form.Requery\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Beim Klicken-Prozedur der Schaltfl&auml;che cmdAlleLoeschen<\/span><\/b><\/p>\n<p><b>Objekte neu einlesen<\/b><\/p>\n<p>Die Schaltfl&auml;che <b>cmdNeuEinlesen <\/b>l&ouml;st die folgende Prozedur aus. Diese weist den Benutzer darauf hin, dass nur neue Elemente hinzugef&uuml;gt werden. Anschlie&szlig;end ruft sie die Prozedur <b>ObjekteInTabellenSchreiben <\/b>auf, die wir bereits weiter oben vorgestellt haben. Auch hier wird der Vorgang durch das Aktualisieren der Daten des Unterformulars abgeschlossen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdNeuEinlesen_Click()\r\n     <span style=\"color:blue;\">MsgBox<\/span> \"Vorhandene Elemente werden beibehalten,  nur neue Elemente werden hinzugef&uuml;gt.\"\r\n     ObjekteInTabelleSchreiben\r\n     Me!sfmObjekteInRibbon.Form.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>Alle Elemente ausw&auml;hlen<\/b><\/p>\n<p>Damit der Benutzer, wenn er alle Elemente einer Kategorie wie Tabellen, Abfragen und so weiter ausw&auml;hlen will, nicht jeden Eintrag anhaken muss, haben wir die Schaltfl&auml;che mit der Beschriftung <b>Alle ausw&auml;hlen <\/b>angelegt. Wenn der Benutzer diese anklickt, soll das Feld <b>InRibbon <\/b>f&uuml;r alle aktuell sichtbaren Eintr&auml;ge auf <b>Ja <\/b>eingestellt werden.<\/p>\n<p>Die dazu notwendige Ereignisprozedur finden Sie in Listing 3. Sie ermittelt zun&auml;chst den Objekttyp, der hier aus dem Wert der gerade ausgew&auml;hlten Registerseite plus eins zusammengesetzt wird (die Registerseiten haben die Werte <b>0 <\/b>bis <b>5<\/b>, die aus der Eigenschaft <b>Seitenindex <\/b>ermittelt werden) und speichert diesen in der Variablen <b>lngObjekttypID<\/b>. Dann aktualisiert sie alle Datens&auml;tze der Tabelle <b>tblObjekteInRibbon<\/b>, deren Feld <b>Objekttyp-ID <\/b>den Wert aus <b>lngObjekttypID <\/b>enth&auml;lt. Danach folgt das obligatorische Aktualisieren der Datensatzquelle des Unterformulars.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdAlleAuswaehlen_Click()\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>lngObjekttypID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     lngObjekttypID = Me!regObjekte + 1\r\n     db.Execute \"UPDATE tblObjekteInRibbon SET InRibbon = -1 WHERE ObjekttypID = \" & lngObjekttypID, dbFailOnError\r\n     Me!sfmObjekteInRibbon.Form.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Beim Klicken-Prozedur der Schaltfl&auml;che cmdAlleAuswaehlen<\/span><\/b><\/p>\n<p><b>Alle Elemente abw&auml;hlen<\/b><\/p>\n<p>Es fehlt noch die Schaltfl&auml;che <b>cmdAlleAbwaehlen<\/b>. Die dadurch ausgel&ouml;ste Prozedur ermittelt genau wie die zuvor beschriebene Prozedur zuerst den Prim&auml;rschl&uuml;sselwert der aktuell angezeigten Objektart.<\/p>\n<p>Dann aktualisiert sie alle Eintr&auml;ge der Tabelle <b>tblObjekteInRibbon<\/b>, deren Feld <b>ObjekttypID <\/b>dem Wert aus <b>lngObjekttypID <\/b>entspricht (siehe Listing 4).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdAlleAbwaehlen_Click()\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>lngObjekttypID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     lngObjekttypID = Me!regObjekte + 1\r\n     db.Execute \"UPDATE tblObjekteInRibbon SET InRibbon = 0 WHERE ObjekttypID = \" & lngObjekttypID, dbFailOnError\r\n     Me!sfmObjekteInRibbon.Form.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Beim Klicken-Prozedur der Schaltfl&auml;che cmdAlleAbwaehlen<\/span><\/b><\/p>\n<p><b>Ribbon anpassen<\/b><\/p>\n<p>Nun haben wir die M&ouml;glichkeit geschaffen, dass der Benutzer die gew&uuml;nschten Elemente zur Anzeige im Ribbon ausw&auml;hlen kann. Wir brauchen nun nur noch das Ribbon anzupassen. Welche M&ouml;glichkeiten haben wir da<\/p>\n<ul>\n<li>Anpassung erst nach Neustart der Anwendung sichtbar: Wenn die Objekte, die im Ribbon angezeigt werden sollen, hin und wieder aktualisiert werden, kann man eine Anpassung w&auml;hlen, die immer nach dem Schlie&szlig;en und erneuten &Ouml;ffnen aktualisiert wird. Dies erlaubt dann die Verwendung aller denkbaren Ribbon-Elemente, also beispielsweise ein <b>tab<\/b>-Element, das jeweils ein <b>group<\/b>-Element mit den Elementen einer jeden Objektart enth&auml;lt.<\/li>\n<li>Anpassung soll sofort sichtbar sein: Wenn die neu hinzugef&uuml;gten oder entfernten Eintr&auml;ge immer direkt sichtbar sein sollen, k&ouml;nnen wir eines der folgenden Elemente nutzen: <b>dynamicMenu<\/b>, <b>gallery<\/b>, <b>dropDown <\/b>oder <b>comboBox<\/b>.<\/li>\n<\/ul>\n<p>Der Nachteil aller genannten Elemente f&uuml;r eine sofort sichtbare Anpassung ist, dass diese erst aufgeklappt werden m&uuml;ssen &#8211; das hei&szlig;t, man hat auf jeden Fall einen Klick mehr als wenn die Elemente direkt wie im ersten Vorschlag als Unterelemente einer Gruppe angezeigt werden. Wir schauen uns nur die erste L&ouml;sung an, da es uns unwahrscheinlich erscheint, dass jemand st&auml;ndig die im Ribbon anzuzeigenden Objekte &auml;ndert und diese &Auml;nderungen immer sofort ben&ouml;tigt. Au&szlig;erdem wird der so eingesparte Aufwand f&uuml;r das Schlie&szlig;en und erneute &Ouml;ffnen der Anwendung dadurch wieder aufgezehrt, dass man immer mindestens einen Klick mehr ben&ouml;tigt, um zum gew&uuml;nschten Objekt zu gelangen.<\/p>\n<p><b>Vorbereitungen f&uuml;r das Anzeigen eines Ribbon-Tabs mit Objekten<\/b><\/p>\n<p>Bevor wir uns die Prozedur anschauen, mit der wir die Definition eines Ribbons zusammenstellen, die alle Objekte enth&auml;lt, die der Benutzer schnell &uuml;ber das Ribbon anzeigen m&ouml;chte, noch ein paar vorbereitende Schritte.<\/p>\n<p>Um die Ribbon-Definition speichern zu k&ouml;nnen, ben&ouml;tigen Sie eine Tabelle namens <b>USysRibbons<\/b>, die im Entwurf wie in Bild 11 aussieht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_011.png\" alt=\"Tabelle zum Speichern der Ribbon-Definition\" width=\"499,6607\" height=\"320,9203\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Tabelle zum Speichern der Ribbon-Definition<\/span><\/b><\/p>\n<p>Dann f&uuml;gen Sie dem VBA-Projekt der betroffenen Datenbank einen Verweis auf die Bibliothek <b>Microsoft Office x.0 Object Library <\/b>hinzu (siehe Bild 12).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_012.png\" alt=\"Verweis auf die Office-Bibliothek\" width=\"499,6607\" height=\"393,9009\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Verweis auf die Office-Bibliothek<\/span><\/b><\/p>\n<p>Damit k&ouml;nnen wir uns die Prozedur anschauen, mit der wir die Definition des Ribbons zur Anzeige der gew&auml;hlten Objekte zusammenstellen und der Tabelle <b>USysRibbons <\/b>zuweisen, die Sie in Listing 5 finden.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>RibbondefinitionAktualisieren()<span style=\"color:blue;\"> As String<\/span>\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>rstObjekttypen<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>rstObjekte<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>strRibbon<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strObjekttyp<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strObjektname<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strImageMso<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     strRibbon = \"&lt;xml version=\"\"1.0\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strRibbon = strRibbon & \"&lt;customUI xmlns=\"\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strRibbon = strRibbon & \"  &lt;ribbon&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strRibbon = strRibbon & \"    &lt;tabs&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strRibbon = strRibbon & \"      &lt;tab id=\"\"tabDatenbankobjekte\"\" label=\"\"Datenbankobjekte\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> rstObjekttypen = db.OpenRecordset(\"SELECT * FROM tblObjekttypen\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rstObjekttypen.EOF\r\n         strObjekttyp = rstObjekttypen!Objekttyp\r\n         <span style=\"color:blue;\">Set<\/span> rstObjekte = db.OpenRecordset(\"SELECT * FROM tblObjekteInRibbon WHERE InRibbon = -1 AND ObjekttypID = \" _\r\n             & rstObjekttypen!Id, dbOpenDynaset)\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> rstObjekte.EOF<span style=\"color:blue;\"> Then<\/span>\r\n             strRibbon = strRibbon & \"        &lt;group id=\"\"grp\" & strObjekttyp & \"\"\" label=\"\"\" & strObjekttyp & \"\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strImageMso = Choose(rstObjekttypen!Id, \"CreateTable\", \"AdpStoredProcedureQuerySelect\", \"ViewsFormView\", _\r\n                 \"CreateReport\", \"CreateMacro\", \"CreateClassModule\")\r\n             <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rstObjekte.EOF\r\n                 strObjektname = rstObjekte!Objektname\r\n                 strRibbon = strRibbon & \"          &lt;button imageMso=\"\"\" & strImageMso & \"\"\" label=\"\"\" & strObjektname _\r\n                     & \"\"\" id=\"\"\" & strObjektname & \"\"\" onAction=\"\"onAction\"\" tag=\"\"\" & rstObjekttypen!Id & \"\"\"\/&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n                 rstObjekte.Move<span style=\"color:blue;\">Next<\/span>\r\n             <span style=\"color:blue;\">Loop<\/span>\r\n             strRibbon = strRibbon & \"        &lt;\/group&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         rstObjekttypen.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     strRibbon = strRibbon & \"          &lt;group id=\"\"grpTools\"\" label=\"\"Tools\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strRibbon = strRibbon & \"              &lt;button imageMso=\"\"ControlToolboxOutlook\"\" \" _\r\n         & \"label=\"\"Objekte bearbeiten\"\" id=\"\"btnObjekteBearbeiten\"\" onAction=\"\"onAction\"\"\/&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strRibbon = strRibbon & \"          &lt;\/group&gt;\"\r\n     strRibbon = strRibbon & \"      &lt;\/tab&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strRibbon = strRibbon & \"    &lt;\/tabs&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strRibbon = strRibbon & \"  &lt;\/ribbon&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strRibbon = strRibbon & \"&lt;\/customUI&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     RibbondefinitionAktualisieren = strRibbon\r\n     db.Execute \"UPDATE USysRibbons SET RibbonXML = '\" & strRibbon & \"' WHERE RibbonName = 'ObjekteInRibbon'\", dbFailOnError\r\n     <span style=\"color:blue;\">If <\/span>db.RecordsAffected = 0<span style=\"color:blue;\"> Then<\/span>\r\n         db.Execute \"INSERT INTO USysRibbons(RibbonName, RibbonXML) VALUES('ObjekteInRibbon', '\" & strRibbon & \"')\", dbFailOnError\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Prozedur zum Aktualisieren der Ribbon-Definition auf Basis der Auswahl im Formular frmObjekteInRibbon<\/span><\/b><\/p>\n<p>Die XML-Definition stellen wir in der String-Variablen <b>strRibbon <\/b>zusammen. Die erste Zeile ist die &uuml;bliche XML-Startzeile, die zweite mit dem Element <b>customUI <\/b>ist das Root-Element des XML-Dokuments. Danach folgen das <b>ribbon<\/b>-, das <b>tabs<\/b>&#8211; und das <b>tab<\/b>-Element, wobei letzteres das erste Element mit weiteren Attributen ist &#8211; hier die Beschriftung (<b>label<\/b>) und der ID (<b>id<\/b>).<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\r\n&lt;customUI xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\"&gt;\r\n   &lt;ribbon&gt;\r\n     &lt;tabs&gt;\r\n       &lt;tab id=\"tabDatenbankobjekte\" \r\n         label=\"Datenbankobjekte\"&gt;<\/pre>\n<p>Die Prozedur erstellt dann ein Recordset auf Basis der Tabelle <b>tblObjekttypen<\/b> und durchl&auml;uft diese in einer <b>Do While<\/b>-Schleife. Darin weist sie der Variablen <b>strObjekttyp <\/b>den Wert des Feldes <b>Objekttyp <\/b>des aktuellen Datensatzes zu.<\/p>\n<p>Dann erstellt sie ein weiteres Recordset namens <b>rstObjekte<\/b>, das alle Datens&auml;tze der Tabelle <b>tblObjekteInRibbon <\/b>enth&auml;lt, deren Feld <b>InRibbon <\/b>den Wert <b>True <\/b>enth&auml;lt und das zum aktuell im Recordset <b>rstObjekttypen <\/b>angegebenen Objekttyp geh&ouml;rt.<\/p>\n<p>Hier pr&uuml;ft die Prozedur mit der <b>EOF<\/b>-Eigenschaft, ob das Recordset <b>rstObjekte <\/b>&uuml;berhaupt Eintr&auml;ge f&uuml;r die aktuelle <b>Objektart <\/b>enth&auml;lt. Falls ja, folgen die in der <b>If&#8230;Then<\/b>-Bedingung enthaltenen Anweisungen. Hier stellt die Prozedur das <b>group<\/b>-Element zusammen, das f&uuml;r den ersten Objekttyp wie folgt aussieht:<\/p>\n<pre>       &lt;group id=\"grpTabellen\" label=\"Tabellen\"&gt;<\/pre>\n<p>Hier wird der Objekttyp aus dem Feld <b>Objekttyp <\/b>sowohl f&uuml;r die Attribute <b>id <\/b>(mit f&uuml;hrendem <b>grp<\/b>) und label als Wert eingef&uuml;gt.<\/p>\n<p>Danach ermittelt die Prozedur den Wert f&uuml;r das Attribut <b>imageMso <\/b>der nachfolgend anzulegenden Eintr&auml;ge f&uuml;r die einzelnen Objekte. Es gibt f&uuml;r jede Kategorie ein eigenes Icon &#8211; also f&uuml;r Tabellen, Abfragen, Formulare, Berichte, Makros und Module. Dazu nutzen wir die <b>Choose<\/b>-Funktion mit den entsprechenden Werten, von denen einer &uuml;ber den mit dem ersten Parameter &uuml;bergebenen Zahlenwert ermittelt wird und in der Variablen <b>strImageMso <\/b>landet.<\/p>\n<p>Dann folgt die innere Schleife &uuml;ber das Recordset <b>rstObjekte<\/b>, die f&uuml;r alle Objekte des aktuellen Objekttyps ein <b>button<\/b>-Element unterhalb des <b>group<\/b>-Elements einf&uuml;gt. Das sieht dann etwa wie folgt aus:<\/p>\n<pre>&lt;button imageMso=\"CreateTable\" label=\"tblTabelle1\"  id=\"tblTabelle1\" onAction=\"onAction\" tag=\"1\"\/&gt;\r\n&lt;button imageMso=\"CreateTable\" label=\"tblTabelle2\"  id=\"tblTabelle2\" onAction=\"onAction\" tag=\"1\"\/&gt;\r\n&lt;button imageMso=\"CreateTable\" label=\"tblTabelle3\"  id=\"tblTabelle3\" onAction=\"onAction\" tag=\"1\"\/&gt;<\/pre>\n<p>Wichtig ist hier, dass wir nicht nur den Namen des Objekts f&uuml;r die Eigenschaft <b>id <\/b>hinterlegen, sondern auch den Prim&auml;rschl&uuml;sselwert der Tabelle <b>tblObjekttypen <\/b>(hier <b>1 <\/b>f&uuml;r Tabellen).<\/p>\n<p>Wir ben&ouml;tigen ja sp&auml;ter nicht nur den Namen des zu &ouml;ffnenden Objekts, sondern auch den Objekttyp, um die zum &Ouml;ffnen dieses Objekts ben&ouml;tige Methode wie <b>DoCmd.OpenTable<\/b>, <b>DoCmd.OpenForm <\/b>et cetera aufrufen zu k&ouml;nnen.<\/p>\n<p>Nachdem alle <b>button<\/b>-Elemente f&uuml;r den aktuellen Objekttyp angelegt wurden, folgt noch das schlie&szlig;ende group-Element:<\/p>\n<pre>&lt;\/group&gt;<\/pre>\n<p>Auf diese Weise durchl&auml;uft die Prozedur alle Objekttypen und Objekte und stellt so das XML-Dokument zusammen.<\/p>\n<p>Danach folgt noch ein weiteres <b>group<\/b>-Element, das eine Schaltfl&auml;che zum &Ouml;ffnen des Formulars <b>frmObjekteInRibbon <\/b>enth&auml;lt:<\/p>\n<pre>&lt;group id=\"grpTools\" label=\"Tools\"&gt;\r\n   &lt;button imageMso=\"ControlTool-boxOutlook\" label=\"Objekte bearbeiten\" id=\"btnObjekteBearbeiten\" onAction=\"onAction\"\/&gt;\r\n&lt;\/group&gt;<\/pre>\n<p>Den Abschluss machen die schlie&szlig;enden Elemente f&uuml;r die eingangs ge&ouml;ffneten Elemente:<\/p>\n<pre>       &lt;\/tab&gt;\r\n     &lt;\/tabs&gt;\r\n   &lt;\/ribbon&gt;\r\n&lt;\/customUI&gt;<\/pre>\n<p>Schlie&szlig;lich f&uuml;hrt die Prozedur eine <b>UPDATE<\/b>-Abfrage aus, welche den Inhalt des Feldes <b>RibbonXML <\/b>der Tabelle <b>USysRibbons <\/b>aktualisiert, die im Feld <b>RibbonName <\/b>den Wert <b>ObjekteInRibbon <\/b>enth&auml;lt. Danach pr&uuml;ft die Prozedur die Anzahl der von dieser Abfrage betroffenen Datens&auml;tze. Ist dieser Wert <b>0<\/b>, ist noch kein Datensatz mit dem Namen <b>ObjekteInRibbon <\/b>vorhanden, sodass dieser mit einer <b>INSERT INTO<\/b>-Abfrage eingef&uuml;gt wird.<\/p>\n<p><b>Ribbon in den Access-Optionen einstellen<\/b><\/p>\n<p>Nachdem Sie diese Prozedur ausgef&uuml;hrt haben, liegt die Ribbon-Definition in der Tabelle <b>USysRibbons <\/b>vor. Damit Sie das Ribbon als Standardribbon f&uuml;r die aktuelle Anwendung ausw&auml;hlen k&ouml;nnen, schlie&szlig;en Sie die Anwendung und &ouml;ffnen diese erneut.<\/p>\n<p>Dann &ouml;ffnen Sie die Access-Optionen und w&auml;hlen dort unter <b>Aktuelle Datenbank|Men&uuml;band- und Symbolleistenoptionen <\/b>den Wert <b>ObjekteInRibbon <\/b>f&uuml;r die Eigenschaft <b>Name des Men&uuml;bands <\/b>aus (siehe Bild 13).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_014.png\" alt=\"Ausw&auml;hlen des anzuzeigenden Ribbons\" width=\"549,6265\" height=\"280,676\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Ausw&auml;hlen des anzuzeigenden Ribbons<\/span><\/b><\/p>\n<p>Danach m&uuml;ssen Sie die Datenbank erneut schlie&szlig;en und wieder &ouml;ffnen, damit die Elemente unserer Ribbondefinition endlich als letztes Tab im Ribbon erscheint (siehe Bild 14). Nun haben wir allerdings noch keine Ereignisprozeduren hinterlegt, die durch das Bet&auml;tigen der Eintr&auml;ge ausgel&ouml;st werden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_1224_013.png\" alt=\"Ribbon mit Datenbankobjekten\" width=\"700\" height=\"118,6316\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Ribbon mit Datenbankobjekten<\/span><\/b><\/p>\n<p><b>Callback-Funktion f&uuml;r die Ribbon-Schaltfl&auml;chen<\/b><\/p>\n<p>Die Prozedur <b>onAction<\/b>, die durch die Angabe des Prozedurnamens f&uuml;r das <b>onAction<\/b>-Attribut der <b>button<\/b>-Elemente beim Anklicken der Ribbon-Schaltfl&auml;chen ausgel&ouml;st wird, sieht wie in Listing 6 aus.<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>onAction(control<span style=\"color:blue;\"> As <\/span>IRibbonControl)\r\n     Select Case control.Tag\r\n         <span style=\"color:blue;\">Case <\/span>1\r\n             DoCmd.OpenTable control.Id\r\n         <span style=\"color:blue;\">Case <\/span>2\r\n             DoCmd.OpenQuery control.Id\r\n         <span style=\"color:blue;\">Case <\/span>3\r\n             DoCmd.OpenForm control.Id\r\n         <span style=\"color:blue;\">Case <\/span>4\r\n             DoCmd.OpenReport control.Id, acViewPreview\r\n         <span style=\"color:blue;\">Case <\/span>5\r\n             DoCmd.RunMacro control.Id\r\n         <span style=\"color:blue;\">Case <\/span>6\r\n             DoCmd.OpenModule control.Id\r\n         <span style=\"color:blue;\">Case Else<\/span>\r\n             Select Case control.Id\r\n                 <span style=\"color:blue;\">Case <\/span>\"btnObjekteBearbeiten\"\r\n                     DoCmd.OpenForm \"frmObjekteInRibbon\"\r\n                 <span style=\"color:blue;\">Case Else<\/span>\r\n                     <span style=\"color:blue;\">Debug.Print<\/span> control.Id\r\n             <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Diese Prozedur wird beim Bet&auml;tigen eines Ribbon-Elements ausgel&ouml;st.<\/span><\/b><\/p>\n<p>Die Prozedur liefert standardm&auml;&szlig;ig mit <b>control <\/b>einen Verweis auf das vom Benutzer bet&auml;tigte Ribbon-Element. Diesem k&ouml;nnen wir &uuml;ber die Eigenschaften <b>Id <\/b>und <b>Tag <\/b>genau die Werte entnehmen, die in der Ribbon-Definition daf&uuml;r festgelegt wurden. F&uuml;r <b>Id <\/b>haben wir ja jeweils den Namen des Objekts hinterlegt, f&uuml;r <b>Tag <\/b>den Objekttyp in Form einer Zahl zwischen <b>1 <\/b>und <b>6<\/b>.<\/p>\n<p>Den Wert der Eigenschaft <b>Tag <\/b>nutzen wir in einer &auml;u&szlig;eren <b>Select Case<\/b>-Bedingung, in der wir nach dem Objekttyp unterscheiden und f&uuml;r jeden der sechs Objekttypen einen unterschiedlichen Zweig ansteuern. Dieser enth&auml;lt dann jeweils eine Anweisung, mit der das unter <b>Id <\/b>angegebene Objekt ge&ouml;ffnet werden kann &#8211; bei Tabellen etwa die Methode <b>DoCmd.OpenTable<\/b>.<\/p>\n<p>Enth&auml;lt <b>Tag <\/b>keinen der Werte <b>1 <\/b>bis <b>6<\/b>, steuern wir den <b>Else<\/b>-Teil der &auml;u&szlig;eren <b>Select Case<\/b>-Bedingung an. Dieser enth&auml;lt eine innere <b>Select Case<\/b>-Bedingung, die pr&uuml;ft, ob die <b>id <\/b>des aufrufenden Elements <b>btnObjekteBearbeiten <\/b>lautet. In diesem Fall soll das Formular <b>frmObjekteInRibbon <\/b>ge&ouml;ffnet werden, damit der Benutzer die &uuml;ber das Ribbon zu &ouml;ffnenden Elemente verwalten kann.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Dieser Beitrag liefert eine L&ouml;sung, mit der Sie die Objekte einer Datenbankanwendung &uuml;ber das Ribbon zugreifbar machen k&ouml;nnen &#8211; um einfach und unkompliziert oft verwendete Elemente an einem leicht zug&auml;nglichen Ort &ouml;ffnen zu k&ouml;nnen.<\/p>\n<p>Man k&ouml;nnte die L&ouml;sung noch erweitern, indem man auch die M&ouml;glichkeit bietet, die Elemente im Entwurf zu &ouml;ffnen. <\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>ObjekteInRibbon.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/4B593F6D-BA5B-4B83-823E-250A79379EB4\/aiu_1224.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Manchmal wird die Liste der Tabellen, Abfragen, Formulare und Co. im Navigationsbereich etwas un&uuml;bersichtlich. Da w&uuml;nscht sich der eine oder andere, dass die wichtigsten Elemente einer Datenbank schnell zur Verf&uuml;gung stehen. Eine M&ouml;glichkeit, das zu erledigen, ist das Ribbon. Wie Sie die dort anzuzeigenden Elemente ausw&auml;hlen und diese dort hinzuf&uuml;gen, zeigt der vorliegende 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":[66012020,662020,44000027],"tags":[],"class_list":["post-55001224","post","type-post","status-publish","format-standard","hentry","category-66012020","category-662020","category-Loesungen"],"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>Objekte im Ribbon verf&uuml;gbar machen - 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\/Objekte_im_Ribbon_verfuegbar_machen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Objekte im Ribbon verf&uuml;gbar machen\" \/>\n<meta property=\"og:description\" content=\"Manchmal wird die Liste der Tabellen, Abfragen, Formulare und Co. im Navigationsbereich etwas un&uuml;bersichtlich. Da w&uuml;nscht sich der eine oder andere, dass die wichtigsten Elemente einer Datenbank schnell zur Verf&uuml;gung stehen. Eine M&ouml;glichkeit, das zu erledigen, ist das Ribbon. Wie Sie die dort anzuzeigenden Elemente ausw&auml;hlen und diese dort hinzuf&uuml;gen, zeigt der vorliegende Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-10T09:39:53+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/d41f62186fc046db8d4c8a57414c7e23\" \/>\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=\"20\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Objekte im Ribbon verf&uuml;gbar machen\",\"datePublished\":\"2020-07-10T09:39:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/\"},\"wordCount\":3343,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/d41f62186fc046db8d4c8a57414c7e23\",\"articleSection\":[\"1\\\/2020\",\"2020\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/\",\"name\":\"Objekte im Ribbon verf&uuml;gbar machen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/d41f62186fc046db8d4c8a57414c7e23\",\"datePublished\":\"2020-07-10T09:39:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/d41f62186fc046db8d4c8a57414c7e23\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/d41f62186fc046db8d4c8a57414c7e23\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekte_im_Ribbon_verfuegbar_machen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Objekte im Ribbon verf&uuml;gbar machen\"}]},{\"@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":"Objekte im Ribbon verf&uuml;gbar machen - 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\/Objekte_im_Ribbon_verfuegbar_machen\/","og_locale":"de_DE","og_type":"article","og_title":"Objekte im Ribbon verf&uuml;gbar machen","og_description":"Manchmal wird die Liste der Tabellen, Abfragen, Formulare und Co. im Navigationsbereich etwas un&uuml;bersichtlich. Da w&uuml;nscht sich der eine oder andere, dass die wichtigsten Elemente einer Datenbank schnell zur Verf&uuml;gung stehen. Eine M&ouml;glichkeit, das zu erledigen, ist das Ribbon. Wie Sie die dort anzuzeigenden Elemente ausw&auml;hlen und diese dort hinzuf&uuml;gen, zeigt der vorliegende Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-07-10T09:39:53+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/d41f62186fc046db8d4c8a57414c7e23","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"20\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Objekte im Ribbon verf&uuml;gbar machen","datePublished":"2020-07-10T09:39:53+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/"},"wordCount":3343,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/d41f62186fc046db8d4c8a57414c7e23","articleSection":["1\/2020","2020","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/","url":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/","name":"Objekte im Ribbon verf&uuml;gbar machen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/d41f62186fc046db8d4c8a57414c7e23","datePublished":"2020-07-10T09:39:53+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/d41f62186fc046db8d4c8a57414c7e23","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/d41f62186fc046db8d4c8a57414c7e23"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Objekte_im_Ribbon_verfuegbar_machen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Objekte im Ribbon verf&uuml;gbar machen"}]},{"@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\/55001224","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=55001224"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001224\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}