{"id":55000543,"date":"2021-12-01T00:00:00","date_gmt":"2021-12-01T00:00:00","guid":{"rendered":"http:\/\/access-basics.de\/543"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Ribbon_anpassen_Teil_2_","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html","title":{"rendered":"Ribbon anpassen, Teil 2"},"content":{"rendered":"<p class='introduction'>Das Ribbon, in der deutschen Version von Office auch Men&uuml;band genannt, ist die Men&uuml;leiste f&uuml;r Office-Anwendungen und somit auch f&uuml;r Access. Sie k&ouml;nnen die Befehle im Ribbon jedoch nicht nur w&auml;hrend der Entwicklung von Access-Anwendungen nutzen, sondern dieses f&uuml;r eigene Anwendungen so anpassen, dass der Benutzer die Funktionen dieser Anwendung dar&uuml;ber aufrufen kann. Dabei k&ouml;nnen Sie die eingebauten Elemente sogar weitgehend ausblenden, sodass man Ihrer Anwendung nur noch an wenigen Stellen ansieht, dass es sich &uuml;berhaupt um eine Access-Anwendung handelt. Diese Artikelreihe liefert alle Informationen, die Sie f&uuml;r die Arbeit mit dem Ribbon und f&uuml;r seine Anpassung und Programmierung ben&ouml;tigen. Dabei lernen Sie auch alle Steuerelemente und ihre Eigenschaften kennen.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>2106_RibbonAnpassen.accdb<\/b>.<\/p>\n<h2>Das dynamicMenu-Element<\/h2>\n<p>Dieses Element nimmt eine besondere Rolle unter den Ribbonelementen ein, denn Sie k&ouml;nnen nicht nur einzelne Attribute mit <b>get&#8230;<\/b>-Attributen manipulieren, sondern Sie k&ouml;nnen den gesamten Inhalt des Men&uuml;s per VBA im XML-Format zusammensetzen und an ein spezielles Callbackattribut zur&uuml;ckgeben.<\/p>\n<p>Das Beispiel finden Sie in der Tabelle <b>USysRibbons <\/b>unter dem Namen <b>Beispiel dynamicMenu<\/b>. Der Code befindet sich im Modul <b>mdlRibbonsDynamicMenu<\/b>.<\/p>\n<p>Das Attribut zum F&uuml;llen des Elements hei&szlig;t <b>getContent <\/b>und wir betten dieses wie folgt in das <b>dynamicMenu<\/b>-Element ein:<\/p>\n<pre>&lt;group id=\"grp0\" label=\"Beispiel dynamicMenu\"&gt;\r\n   &lt;dynamicMenu id=\"dyn\" label=\"Dynamic Menu:\"                               getContent=\"getContent\" \/&gt;\r\n&lt;\/group&gt;<\/pre>\n<p>Eine sehr einfache Variante der dadurch aufgerufenen Callbackprozedur <b>getContent<\/b> sieht wie in Listing 1 aus.<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>getContent(control<span style=\"color:blue;\"> As <\/span>IRibbonControl, ByRef content)\r\n     <span style=\"color:blue;\">Dim <\/span>strXML<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     strXML = \"&lt;menu xmlns=\"\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\"\"&gt;\"\r\n     For i = 1 To 10\r\n         strXML = strXML & \"&lt;button id=\"\"btn\" & i & \"\"\" label=\"\"Button \" & i & \"\"\"\/&gt;\"\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n     strXML = strXML & \"&lt;\/menu&gt;\"\r\n     content = strXML\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 1: Beispiel f&uuml;r ein dynamicMenu-Element<\/p>\n<p>Die Prozedur erh&auml;lt einen Verweis auf das ausl&ouml;sende <b>dynamicMenu<\/b>-Element als Parameter und erh&auml;lt einen weiteren Parameter namens <b>content<\/b>, der den Inhalt des <b>dynamicMenu<\/b>-Elements entgegennimmt.<\/p>\n<p>Sie f&uuml;llt sukzessive eine Variable namens <b>strXML<\/b>. Die erste Zeile enth&auml;lt das <b>menu<\/b>-Element:<\/p>\n<pre>&lt;menu xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\"&gt;<\/pre>\n<p>Sie durchl&auml;uft eine Schleife von <b>1 <\/b>bis <b>10<\/b>, in der Sie Eintr&auml;ge wie die folgenden zu der ersten Zeile hinzuf&uuml;gt:<\/p>\n<pre>&lt;button id=\"btn1\" label=\"Button 1\"\/&gt;\r\n&lt;button id=\"btn2\" label=\"Button 2\"\/&gt;\r\n&lt;button id=\"btn3\" label=\"Button 3\"\/&gt;\r\n...\r\n&lt;button id=\"btn10\" label=\"Button 10\"\/&gt;<\/pre>\n<p>Schlie&szlig;lich h&auml;ngt die Prozedur noch die abschlie&szlig;ende Zeile mit dem schlie&szlig;enden <b>menu<\/b>-Element an:<\/p>\n<pre>&lt;\/menu&gt;<\/pre>\n<p>Schlie&szlig;lich gibt die Prozedur das in <b>strXML <\/b>zusammengestellte Ergebnis mit dem Parameter <b>content <\/b>zur&uuml;ck. Das Ergebnis dieses Beispiels finden Sie in Bild 1.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_052.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_052.png\" alt=\"dynamicMenu-Element\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: dynamicMenu-Element<\/p>\n<h2>dynamicMenu-Element aus der Datenbank f&uuml;llen<\/h2>\n<p>Genau wie &uuml;ber eine Schleife k&ouml;nnen Sie das <b>dynamicMenu<\/b>-Element auch mit den Daten einer Tabelle aus der Datenbank f&uuml;llen. Um den Spa&szlig; zu erh&ouml;hen, machen wir das gleich mal mit zwei Ebenen &#8211; Kategorien und Artikeln. Das Ergebnis soll wie in Bild 2 aussehen und ein Klick auf einen der Artikel soll auch noch ein Formular &ouml;ffnen, das diesen Artikel anzeigt.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_053.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_053.png\" alt=\"dynamicMenu-Element mit Kategorien und Artikeln\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: dynamicMenu-Element mit Kategorien und Artikeln<\/p>\n<p>Das Beispiel finden Sie in der Tabelle <b>USysRibbons <\/b>unter dem Namen <b>Beispiel dynamicMenu aus Datenbank<\/b>. Der Code befindet sich im Modul <b>mdlRibbonsDynamicMenu<\/b>.<\/p>\n<p>Die Prozedur, die durch das Callbackattribut <b>getContent <\/b>ausgel&ouml;st wird, finden Sie in Listing 2. Die Prozedur referenziert mit der Variablen <b>db <\/b>das aktuelle <b>Database<\/b>-Objekt und mit <b>rstKategorien <\/b>ein Recordset auf Basis der Tabelle <b>tblKategorien<\/b>. Sie erstellt dann zun&auml;chst das umschlie&szlig;ende <b>menu<\/b>-Element und steigt dann in eine <b>Do While<\/b>-Schleife &uuml;ber alle Kategorien ein. Darin f&uuml;gt sie zun&auml;chst f&uuml;r jede Kategorie ein neues <b>menu<\/b>-Element hinzu und legt seine Attribute fest. <b>id <\/b>erh&auml;lt den Buchstaben <b>k <\/b>und die <b>KategorieID<\/b>, <b>label <\/b>erh&auml;lt den Kategorienamen und <b>image <\/b>den Wert <b>folder<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>dynKategorienUndArtikel_getContent(control<span style=\"color:blue;\"> As <\/span>IRibbonControl, ByRef content)\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>rstKategorien<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>rstArtikel<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>strXML<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rstKategorien = db.OpenRecordset(\"SELECT * FROM tblKategorien\", dbOpenDynaset)\r\n     strXML = \"&lt;menu xmlns=\"\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rstKategorien.EOF\r\n         strXML = strXML & \"  &lt;menu id=\"\"k\" & rstKategorien!KategorieID & \"\"\" label=\"\"\" & rstKategorien!Kategoriename _\r\n             & \"\"\" image=\"\"folder\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> rstArtikel = db.OpenRecordset(\"SELECT * FROM tblArtikel WHERE KategorieID = \" & rstKategorien!KategorieID, dbOpenDynaset)\r\n         <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rstArtikel.EOF\r\n             strXML = strXML & \"    &lt;button id=\"\"a\" & rstArtikel!ArtikelID & \"\"\" label=\"\"\" & rstArtikel!Artikelname _\r\n                 & \"\"\" onAction=\"\"btnArticle_onAction\"\" tag=\"\"\" & rstArtikel!ArtikelID & \"\"\" image=\"\"form\"\"\/&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             rstArtikel.Move<span style=\"color:blue;\">Next<\/span>\r\n         <span style=\"color:blue;\">Loop<\/span>\r\n         strXML = strXML & \"  &lt;\/menu&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         rstKategorien.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     strXML = strXML & \"&lt;\/menu&gt;\"\r\n     content = strXML\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 2: Beispiel zum F&uuml;llen eines dynamicMenu-Elements aus den Daten einer Datenbank<\/p>\n<p>Danach erstellt die Prozedur ein Recordset, das alle Datens&auml;tze der Tabelle <b>tblArtikel <\/b>enth&auml;lt, die zur aktuellen Kategorie aus der &uuml;bergeordneten Schleife geh&ouml;ren. Diese durchl&auml;uft die Prozedur ebenfalls in einer <b>Do While<\/b>-Schleife. Hier legt sie jeweils ein <b>button<\/b>-Element f&uuml;r den aktuellen Artikel an. Die <b>id <\/b>erh&auml;lt den Buchstaben <b>a <\/b>und die Artikel-ID, das <b>label <\/b>den Artikelnamen und das Attribut <b>onAction <\/b>den Prozedurnamen <b>btnArticle_onAction<\/b>. Und damit wir beim Anklicken des <b>button<\/b>-Elements wissen, welchen Artikel der Benutzer &uuml;berhaupt angeklickt hat, hinterlegen wir f&uuml;r das <b>tag<\/b>-Attribut noch den Prim&auml;rschl&uuml;sselwert des jeweiligen Artikels.<\/p>\n<p>Sind alle Artikel einer Kategorie durchlaufen, f&uuml;gt die Prozedur das schlie&szlig;ende <b>menu<\/b>-Element hinzu und schreitet mit der n&auml;chsten Kategorie voran. Auf diese Weise werden alle Kategorien und Artikel eingef&uuml;gt, bevor das schlie&szlig;ende <b>menu<\/b>-Element folgt und die Prozedur den Inhalt von <b>strXML <\/b>mit dem Parameter <b>content <\/b>zur&uuml;ckgibt.<\/p>\n<p>Das Ergebnis sieht in gek&uuml;rzter Form wie in Listing 3 aus.<\/p>\n<pre>&lt;menu xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\"&gt;\r\n   &lt;menu id=\"k1\" label=\"Getr&auml;nke\" image=\"folder\"&gt;\r\n     &lt;button id=\"a1\" label=\"Chai\" onAction=\"btnArticle_onAction\" tag=\"1\" image=\"form\"\/&gt;\r\n     &lt;button id=\"a2\" label=\"Chang\" onAction=\"btnArticle_onAction\" tag=\"2\" image=\"form\"\/&gt;\r\n     ...\r\n   &lt;\/menu&gt;\r\n   &lt;menu id=\"k2\" label=\"Gew&uuml;rze\" image=\"folder\"&gt;\r\n     &lt;button id=\"a3\" label=\"Aniseed Syrup\" onAction=\"btnArticle_onAction\" tag=\"3\" image=\"form\"\/&gt;\r\n     &lt;button id=\"a4\" label=\"Chef Anton's Cajun Seasoning\" onAction=\"btnArticle_onAction\" tag=\"4\" image=\"form\"\/&gt;\r\n     ...\r\n   &lt;\/menu&gt;\r\n   ...\r\n&lt;\/menu&gt;<\/pre>\n<p class='imagetext'>Listing 3: Der von der Prozedur dynKategorienUndArtikel_getContent erzeugte XML-Ausdruck (gek&uuml;rzt)<\/p>\n<h2>Anzeigen des Formulars mit dem gew&auml;hlten Artikel<\/h2>\n<p>F&uuml;r das Callbackattribut <b>btnArticle_onAction <\/b>hinterlegen wir die folgende Prozedur:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>btnArticle_onAction(control<span style=\"color:blue;\"><span style=\"color:blue;\"> As <\/span><\/span>IRibbonControl)\r\n     <span style=\"color:blue;\">Dim <\/span>lngArtikelID<span style=\"color:blue;\"><span style=\"color:blue;\"> As Long<\/span><\/span>\r\n     lngArtikelID = control.Tag\r\n     DoCmd.OpenForm \"frmArtikel\",            WhereCondition:=\"ArtikelID = \" & lngArtikelID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese Prozedur ermittelt aus der Eigenschaft <b>tag <\/b>des Parameters <b>control <\/b>den Prim&auml;rsch&uuml;sselwert des Artikels, den der Benutzer angeklickt hat. Diesen f&uuml;gen wir dann &uuml;ber die Variable <b>lngArtikel <\/b>als Vergleichswert in die <b>WhereCondition <\/b>der <b>DoCmd.OpenForm<\/b>-Methode ein.<\/p>\n<p>Sie k&ouml;nnen auch Men&uuml;-Eintr&auml;ge zum Hinzuf&uuml;gen neuer Kategorien oder Artikel hinzuf&uuml;gen &#8211; hier ergeben sich eine Menge neuer Ideen!<\/p>\n<h2>dynamicMenu zur Laufzeit aktualisieren<\/h2>\n<p>Bisher wird das <b>dynamicMenu<\/b>-Element beim ersten Aufruf per VBA zusammengestellt. Was aber, wenn der Benutzer bei der Arbeit mit der Datenbank neue Kategorien oder neue Artikel anlegt oder die vorhandenen Daten &auml;ndert oder l&ouml;scht Dann sollte auch das Men&uuml; beim n&auml;chsten Aufruf neu zusammengestellt werden.<\/p>\n<p>Was wir dazu brauchen, ist wiederum ein Attribut namens <b>onLoad <\/b>f&uuml;r das <b>customUI<\/b>-Element und daf&uuml;r eine Ereignisprozedur, welche die Ribbondefinition per <b>IRibbonUI<\/b>-Variable referenziert.<\/p>\n<p>F&uuml;r diese k&ouml;nnen wir dann zu gegebener Zeit die <b>Invalidate<\/b>&#8211; oder die <b>InvalidateControl<\/b>-Methode aufrufen.<\/p>\n<p>Also erweitern wir <b>customUI <\/b>um das <b>onLoad<\/b>-Attribut:<\/p>\n<pre>&lt;customUI ... loadImage=\"loadImage\"   onLoad=\"onLoad_dynamicMenu\"&gt;<\/pre>\n<p>Die Callbackprozedur implementieren wir wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>onLoad_dynamicMenu(ribbon<span style=\"color:blue;\"><span style=\"color:blue;\"> As <\/span><\/span>IRibbonUI)\r\n     <span style=\"color:blue;\">Set<\/span> objRibbon_DynamicMenu = ribbon\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Deklaration der ben&ouml;tigten Variablen lautet:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>objRibbon_DynamicMenu<span style=\"color:blue;\"><span style=\"color:blue;\"> As <\/span><\/span>IRibbonUI<\/pre>\n<p>Um das Ribbon beispielsweise nach dem &Auml;ndern eines Datensatzes im Formular <b>frmArtikel <\/b>neu zu laden, f&uuml;gen wir f&uuml;r das Ereignis <b>Nach Aktualisierung <\/b>des Formulars die folgende Ereignisprozedur hinzu:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_AfterUpdate()\r\n     objRibbon_DynamicMenu.Invalidate\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit wird das <b>dynamicMenu <\/b>nach &Auml;nderungen an einem Artikel im Formular <b>frmArtikel <\/b>neu gef&uuml;llt.<\/p>\n<h2>Das gallery-Element<\/h2>\n<p>Mit dem <b>gallery<\/b>-Element k&ouml;nnen Sie Elemente nicht nur untereinander, sondern unter- und nebeneinander anzeigen. Dazu teilen Sie dem <b>gallery<\/b>-Element mit den Attributen <b>columns <\/b>und <b>rows <\/b>mit, wie die enthaltenen Elemente dargestellt werden sollen.<\/p>\n<p>Das Beispiel finden Sie in der Tabelle <b>USysRibbons <\/b>unter dem Namen <b>Beispiel gallery<\/b>. Der Code befindet sich im Modul <b>mdlRibbonsGallery<\/b>.<\/p>\n<p>Hier ist ein Beispiel f&uuml;r ein sehr einfaches <b>gallery<\/b>-Element mit zwei mal zwei Elementen:<\/p>\n<pre>&lt;group id=\"grp0\" label=\"Beispiel gallery\"&gt;\r\n   &lt;gallery id=\"gal\" label=\"Galerie\" rows=\"2\" \r\n       columns=\"2\"&gt;\r\n     &lt;item id=\"itm1\" label=\"Element 1\" \/&gt;\r\n     &lt;item id=\"itm2\" label=\"Element 2\" \/&gt;\r\n     &lt;item id=\"itm3\" label=\"Element 3\" \/&gt;\r\n     &lt;item id=\"itm4\" label=\"Element 4\" \/&gt;\r\n   &lt;\/gallery&gt;\r\n&lt;\/group&gt;<\/pre>\n<p>Dieses sieht wie in Bild 3 aus. Die Elemente werden also zuerst zeilenweise hinzugef&uuml;gt und dann untereinander. Dabei geben die Werte f&uuml;r die beiden Attribute <b>rows<\/b> und <b>columns <\/b>lediglich an, wie gro&szlig; der Platz f&uuml;r das <b>gallery<\/b>-Element berechnet wird. Sie legen damit keine Obergrenze f&uuml;r die anzeigbaren Elemente fest. Wenn Sie mehr Elemente hinzuf&uuml;gen, also in dem durch <b>rows <\/b>und <b>columns <\/b>festgelegten Platz angezeigt werden k&ouml;nnen, erscheint eine Bildlaufleiste und die &uuml;brigen Elemente werden unten angeh&auml;ngt (siehe Bild 4).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_054.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_054.png\" alt=\"gallery-Element\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: gallery-Element<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_055.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_055.png\" alt=\"gallery-Element mit Bildlaufleiste\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 4: gallery-Element mit Bildlaufleiste<\/p>\n<p>Das <b>gallery<\/b>-Element hat noch zwei interessante Eigenschaften:<\/p>\n<ul>\n<li><b>itemHeight<\/b>: Gibt die H&ouml;he der Bilder im <b>gallery<\/b>-Element an.<\/li>\n<li><b>itemWidth<\/b>: Gibt die Breite der Bilder im <b>gallery<\/b>-Element an.<\/li>\n<\/ul>\n<p>Diese treten jedoch nur in Erscheinung, wenn f&uuml;r die Elemente &uuml;berhaupt Bilder hinterlegt sind. Dies ist etwa in folgendem Beispiel der Fall:<\/p>\n<pre>&lt;customUI ... loadImage=\"loadImage\"&gt;\r\n...\r\n&lt;group id=\"grp0\" label=\"Beispiel gallery\"&gt;\r\n   &lt;gallery id=\"gal\" label=\"Galerie\" rows=\"2\" \r\n       columns=\"2\" itemHeight=\"32\" itemWidth=\"32\"&gt;\r\n     &lt;item id=\"itm1\" label=\"Element 1\" image=\"apple\" \/&gt;\r\n     &lt;item id=\"itm2\" label=\"Element 2\" image=\"lemon\" \/&gt;\r\n     &lt;item id=\"itm3\" label=\"Element 3\" image=\"hamburger\"\/&gt;\r\n     &lt;item id=\"itm4\" label=\"Element 4\" image=\"banana\" \/&gt;\r\n   &lt;\/gallery&gt;\r\n&lt;\/group&gt;<\/pre>\n<p>Das Ergebnis sehen Sie in Bild 5.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_056.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_056.png\" alt=\"gallery-Element mit Bildern\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 5: gallery-Element mit Bildern<\/p>\n<h2>gallery-Element immer neu laden<\/h2>\n<p>Genau wie das <b>comboBox<\/b>-Element weist auch das <b>gallery<\/b>-Element das Attribut <b>invalidateContentOnDrop <\/b>auf. Stellen Sie dieses auf <b>true <\/b>ein, wird der Inhalt des Elements immer wieder neu geladen.<\/p>\n<p>Dazu ben&ouml;tigen wir aber zun&auml;chst die notwendigen Attribute, die zum dynamischen Laden der Elemente notwendig sind.<\/p>\n<p>Diese hinterlegen wir in der Definition aus Listing 4. Diese Definition finden Sie in der Tabelle <b>USysRibbons <\/b>unter dem Namen <b>Beispiel gallery dynamisch<\/b>. Den Code finden Sie im Modul <b>mdlRibbonsGallery<\/b>.<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\r\n&lt;customUI xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\" loadImage=\"loadImage\"&gt;\r\n   &lt;ribbon&gt;\r\n     &lt;tabs&gt;\r\n       &lt;tab id=\"tab\" label=\"Beispiel Men&uuml;s\" insertBeforeMso=\"TabHomeAccess\"&gt;\r\n         &lt;group id=\"grp0\" label=\"Beispiel gallery\"&gt;\r\n           &lt;gallery id=\"gal\" label=\"Galerie\" itemHeight=\"32\" itemWidth=\"32\" getItemLabel=\"gal_getItemLabel\" \r\n               getItemImage=\"gal_getItemImage\" getItemID=\"gal_getItemID\" getItemCount=\"gal_getItemCount\" \r\n               invalidateContentOnDrop=\"true\"\/&gt;\r\n         &lt;\/group&gt;\r\n       &lt;\/tab&gt;\r\n     &lt;\/tabs&gt;\r\n   &lt;\/ribbon&gt;\r\n&lt;\/customUI&gt;<\/pre>\n<p class='imagetext'>Listing 4: Beispiel f&uuml;r ein gallery-Element, das aus der Datenbank bef&uuml;llt wird<\/p>\n<p>Wir haben in diesem Beispiel wieder die beiden Attribute <b>columns <\/b>und <b>rows <\/b>entfernt, da diese nicht dynamisch gesetzt werden k&ouml;nnen &#8211; es gibt kein <b>get&#8230;<\/b>-Attribute f&uuml;r diese Eigenschaften. Wenn wir diese weglassen, teilt das Ribbon die Elemente gleichm&auml;&szlig;ig auf Zeilen und Spalten auf.<\/p>\n<p>Wir wollen in diesem Beispiel einmal alle Bilder, die in der Tabelle <b>MSysResources <\/b>gespeichert sind, in einem <b>gallery<\/b>-Element auflisten. Dazu ben&ouml;tigen wir wieder die Attribute <b>getItemCount<\/b>, <b>getItemLabel <\/b>und <b>getItemID<\/b>. Au&szlig;erdem wollen wir zu jedem Element das Bild anzeigen und nutzen dazu das Attribut <b>getItemImage<\/b>.<\/p>\n<p>Die folgende Array-Variable soll die einzelnen Eintr&auml;ge in der Prozedur f&uuml;r das Attribut <b>getItemCount <\/b>erfassen:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>strGallery()<span style=\"color:blue;\"><span style=\"color:blue;\"> As String<\/span><\/span><\/pre>\n<p>Die Prozedur aus Listing 5 ermittelt die Anzahl der Elemente und stellt die wichtigsten Informationen zu diesen im Array <b>strGallery <\/b>zusammen. Dazu durchl&auml;uft diese Prozedur alle Datens&auml;tze eines Recordsets basierend auf der Tabelle <b>MSysResources<\/b>. Wir haben diese gefiltert nach Elementen, deren Feld <b>Type <\/b>den Wert <b>img <\/b>enth&auml;lt.<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>gal_getItemCount(control<span style=\"color:blue;\"> As <\/span>IRibbonControl, ByRef count)\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;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM MSysResources WHERE Type = 'img'\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         ReDim Preserve strGallery(1, i)<span style=\"color:blue;\"> As String<\/span>\r\n         strGallery(0, i) = rst!ID\r\n         strGallery(1, i) = rst!Name\r\n         i = i + 1\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     count = i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 5: Code zum Ermitteln der Anzahl der Elemente f&uuml;r das gallery-Element aus der Tabelle MSysResources<\/p>\n<p>Beim Durchlaufen des Recordsets in einer <b>Do -While<\/b>-Schleife erweitern wir das zweidimensionale Array jeweils um eine Zeile und f&uuml;gen der ersten Spalte des neu hinzugef&uuml;gten Elements die ID und der zweiten den Namen aus der Tabelle hinzu. Dabei erh&ouml;hen wir die Z&auml;hlervariable <b>i <\/b>jeweils um <b>1<\/b>. Der Wert von <b>i<\/b> entspricht anschlie&szlig;end der Anzahl der einzulesenden Elemente und wird mit dem Parameter <b>count <\/b>zur&uuml;ckgegeben.<\/p>\n<p>Entsprechend dieser Anzahl ruft das Ribbon anschlie&szlig;end die Prozeduren f&uuml;r die drei Attribute <b>getItemLabel<\/b>, <b>getItemImage <\/b>und <b>getItemID <\/b>auf. Die Prozedur <b>gal_getItemLabel <\/b>gibt als Bezeichnung des Elements den Wert des Feldes <b>Name <\/b>zur&uuml;ck, der im Array in der zweiten Spalte enthalten ist:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>gal_getItemLabel(control<span style=\"color:blue;\"><span style=\"color:blue;\"> As <\/span><\/span>IRibbonControl, _\r\n         index<span style=\"color:blue;\"><span style=\"color:blue;\"> As Integer<\/span><\/span>, ByRef label)\r\n     label = strGallery(1, index)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur <b>gal_getItemID <\/b>holt den Wert aus der ersten Spalte des Arrays und gibt diese mit dem Parameter <b>ID <\/b>zur&uuml;ck:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>gal_getItemID(control<span style=\"color:blue;\"><span style=\"color:blue;\"> As <\/span><\/span>IRibbonControl, _\r\n         index<span style=\"color:blue;\"><span style=\"color:blue;\"> As Integer<\/span><\/span>, ByRef ID)\r\n     ID = strGallery(0, index)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Schlie&szlig;lich fehlt noch die Prozedur <b>gal_getItemImage<\/b>. Diese liefert einen Verweis auf das ausl&ouml;sende Steuerelement f&uuml;r den Parameter <b>control <\/b>und den aktuellen <b>index<\/b>, also den Wert f&uuml;r das aktuell zu f&uuml;llende Element. Der Parameter <b>image <\/b>erwartet ein <b>StdPicture<\/b>-Element mit dem Bild, das im <b>gallery<\/b>-Element f&uuml;r diesen Eintrag angezeigt werden soll. Dazu ermitteln wir aus dem Array <b>strGallery <\/b>den Namen aus der zweiten Spalte, welcher dem Bildnamen entspricht. Danach k&ouml;nnen wir die Funktion <b>PicFrom-SharedResource_Ribbon <\/b>nutzen, um das Bild aus der Tabelle <b>MSysResources <\/b>zu diesem Namen einzulesen und mit dem Parameter <b>image <\/b>zur&uuml;ckzugeben:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>gal_getItemImage(control<span style=\"color:blue;\"><span style=\"color:blue;\"> As <\/span><\/span>IRibbonControl, _\r\n         index<span style=\"color:blue;\"><span style=\"color:blue;\"> As Integer<\/span><\/span>, ByRef image)\r\n     <span style=\"color:blue;\">Dim <\/span>strImage<span style=\"color:blue;\"><span style=\"color:blue;\"> As String<\/span><\/span>\r\n     strImage = strGallery(1, index)\r\n     <span style=\"color:blue;\">Set<\/span> image = _\r\n         PicFromSharedResource_Ribbon(CStr(strImage))\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis sieht schlie&szlig;lich wie in Bild 6 aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_057.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_057.png\" alt=\"gallery-Element mit zur Laufzeit geladenen Bildern\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 6: gallery-Element mit zur Laufzeit geladenen Bildern<\/p>\n<p>Da wir das Attribut <b>invalidateContentOnDrop <\/b>auf den Wert <b>true <\/b>eingestellt haben, k&ouml;nnen wir zur Laufzeit weitere Elemente zur Tabelle <b>MSysResources <\/b>hinzuf&uuml;gen und diese werden direkt beim n&auml;chsten Aufklappen vom <b>gallery<\/b>-Element angezeigt.<\/p>\n<h2>Das splitButton-Element<\/h2>\n<p>Dieses Element ist vermutlich eines der eingebauten Elemente, das Sie st&auml;ndig verwenden: Bei dem Element zum &Auml;ndern der Ansicht eines Objekts handelt es sich n&auml;mlich um ein <b>splitButton<\/b>-Element (siehe Bild 7). Damit w&auml;hlen Sie einen der Eintr&auml;ge <b>Formularansicht<\/b>, <b>Datenblattansicht<\/b>, <b>Layoutansicht <\/b>oder <b>Entwurfsansicht <\/b>aus der Aufklappliste aus, wobei einer der Eintr&auml;ge immer schon als sofort anklickbares Element erscheint.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_058.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_058.png\" alt=\"Das wohl meistgenutzte eingebaute splitButton-Element\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 7: Das wohl meistgenutzte eingebaute splitButton-Element<\/p>\n<p>Dieses Element k&ouml;nnen wir ebenfalls selbst zu unseren Ribbons hinzuf&uuml;gen. Der XML-Code f&uuml;r dieses Element ist dabei genauso aufgebaut, wie es auch zu sehen ist: Es enth&auml;lt ein <b>button<\/b>-Element sowie ein <b>menu<\/b>-Element mit den <b>button<\/b>-Elementen f&uuml;r die aufklappbare Liste.<\/p>\n<p>Das Beispiel finden Sie in der Tabelle <b>USysRibbons <\/b>unter dem Namen <b>Beispiel splitButton<\/b>.<\/p>\n<p>Der Code f&uuml;r ein benutzerdefiniertes <b>splitButton<\/b>-Element sieht wie in Listing 6 aus. Die Gr&ouml;&szlig;e f&uuml;r das Icon im immer sichtbaren <b>button<\/b>-Element stellen Sie bereits f&uuml;r das <b>splitButton<\/b>-Element ein. Dieses stellt als eines der wenigen Elemente nicht das Attribut <b>label <\/b>zur Verf&uuml;gung. Unterhalb des <b>splitButton<\/b>-Elements ordnen wir das <b>button<\/b>-Element an, das die immer sichtbare Schaltfl&auml;che anzeigt, sowie ein <b>menu<\/b>-Element mit weiteren <b>button<\/b>-Elementen &#8211; eben jenen, die erst beim Aufklappen erscheinen.<\/p>\n<pre>&lt;group id=\"grp0\" label=\"Beispiel splitButton\"&gt;\r\n   &lt;splitButton id=\"spb\" size=\"large\"&gt;\r\n     &lt;button id=\"btnBanane\" label=\"Banane\" image=\"banana\" \/&gt;\r\n     &lt;menu id=\"spbMenu\" itemSize=\"large\"&gt;\r\n       &lt;button id=\"spbLemon\" label=\"Zitrone\" image=\"lemon\" \/&gt;\r\n       &lt;button id=\"spbApfel\" label=\"Apfel\" image=\"apple\" \/&gt;\r\n       &lt;button id=\"spbBanane\" label=\"Banane\" image=\"banana\" \/&gt;\r\n       &lt;button id=\"spbAnanas\" label=\"Pineapple\" image=\"pineapple\" \/&gt;\r\n       &lt;button id=\"spbOrange\" label=\"Orange\" image=\"orange\" \/&gt;\r\n     &lt;\/menu&gt;\r\n   &lt;\/splitButton&gt;\r\n&lt;\/group&gt;<\/pre>\n<p class='imagetext'>Listing 6: Code f&uuml;r ein splitButton-Element<\/p>\n<p>Die Gr&ouml;&szlig;e f&uuml;r die Icons der <b>button<\/b>-Elemente stellen wir wiederum nicht f&uuml;r die <b>button<\/b>-Elemente selbst ein, sondern f&uuml;r das Element <b>menu <\/b>&#8211; und zwar mit dem Attribut <b>itemSize<\/b>. F&uuml;r die einzelnen <b>button<\/b>-Elemente k&ouml;nnten wir nun beispielsweise noch das <b>onAction<\/b>-Attribut festlegen und Prozeduren hinzuf&uuml;gen, die durch die jeweiligen Schaltfl&auml;chen ausgel&ouml;st werden. Das hier definierte Ribbon sieht wie in Bild 8 aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_059.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_059.png\" alt=\"Ein benutzerdefiniertes splitButton-Element\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 8: Ein benutzerdefiniertes splitButton-Element<\/p>\n<p>Das <b>splitButton<\/b>-Element l&auml;sst sich im Gegensatz zu den anderen aufklappbaren Elementen nicht zur Laufzeit &uuml;ber <b>get&#8230;<\/b>-Attribute mit Daten f&uuml;llen.<\/p>\n<h2>Das control-Element<\/h2>\n<p>Sie k&ouml;nnen auch die eingebauten Ribbonelemente an beliebiger Stelle in Ihren eigenen Ribbondefinitionen einf&uuml;gen. Dazu ben&ouml;tigen Sie das <b>control<\/b>-Element. F&uuml;r dieses legen Sie mit dem Attribut <b>idMso <\/b>fest, welches Steuerelement es abbilden soll. Die <b>idMso<\/b> finden Sie am einfachsten &uuml;ber den Bereich <b>Men&uuml;band anpassen <\/b>in den Access-Optionen (Ribboneintrag <b>Datei|Optionen<\/b>).<\/p>\n<p>Angenommen, Sie m&ouml;chten den Befehl <b>Datenbank komprimieren und reparieren <\/b>in Ihre Ribbondefinition aufnehmen. Sie wissen, dass sich dieser Befehl im Backstagebereich befindet, den Sie &uuml;ber den <b>Datei<\/b>-Reiter &ouml;ffnen. Also wechseln Sie unter Men&uuml;band anpassen unter <b>Befehle ausw&auml;hlen <\/b>zun&auml;chst zu <b>Registerkarte &#8222;Datei&#8220;<\/b>. Die darunter befindliche Liste listet nun alle Befehle auf, die unter bestimmten Konstellationen in diesem Bereich erscheinen k&ouml;nnen. Darunter finden wir auch den Befehl <b>Datenbank komprimieren und reparieren<\/b>. Der Trick ist nun, den Mauszeiger &uuml;ber diesem Befehl zu positionieren. Es erscheint ein ToolTip-Text, der am Ende in Klammern den englischen Namen f&uuml;r die <b>idMso <\/b>anzeigt &#8211; in diesem Fall <b>FileCompactAndRepairDatabase<\/b> (siehe Bild 9).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_060.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_060.png\" alt=\"Ermitteln der idMso eines Elements &uuml;ber die Access-Optionen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 9: Ermitteln der idMso eines Elements &uuml;ber die Access-Optionen<\/p>\n<p>Auf diese Weise k&ouml;nnen Sie mit ein wenig Detektivarbeit die <b>idMso <\/b>f&uuml;r alle gew&uuml;nschten Elemente ausfindig machen.<\/p>\n<p>Weiter unten stellen wir noch ein Formular vor, mit dem Sie noch schneller an die gew&uuml;nschten <b>idMso<\/b>-Werte kommen &#8211; auch f&uuml;r <b>tab<\/b>&#8211; und <b>group<\/b>-Elemente.<\/p>\n<p>Wie aber f&uuml;gen Sie das gew&uuml;nschte Element nun zu Ihrer eigenen Ribbondefinition hinzu Hier kommt das <b>control<\/b>-Element ins Spiel. Dieses bildet exakt das Steuerelement ab, dessen <b>idMso <\/b>Sie angeben.<\/p>\n<p>Im folgenden Beispiel (siehe Tabelle <b>USysRibbons <\/b>unter <b>Beispiel control<\/b>) f&uuml;gen wir die Schaltfl&auml;che <b>Datenbank komprimieren und reparieren <\/b>hinzu. Dabei &uuml;berschreiben wir mit der Eigenschaft <b>label <\/b>auch gleich noch die Beschriftung mit dem Text <b>Komprimieren<\/b>:<\/p>\n<pre>&lt;control idMso=\"FileCompactAndRepairDatabase\" \r\n       size=\"large\" label=\"Komprimieren\" \/&gt;<\/pre>\n<p>Dies h&auml;tten wir auch erreichen k&ouml;nnen, wenn wir einfach ein <b>button<\/b>-Element mit der gleichen <b>idMso <\/b>verwendet h&auml;tten:<\/p>\n<pre>&lt;button idMso=\"FileCompactAndRepairDatabase\" \r\n       size=\"large\" label=\"Komprimieren\" \/&gt;<\/pre>\n<p>Welchen Vorteil bietet uns nun das <b>control<\/b>-Element, sodass wir dieses nutzen sollten Dieser Vorteil tritt erst in Erscheinung, wenn wir komplexere Steuerelemente abbilden wollen. Wollen Sie beispielsweise das <b>splitButton<\/b>-Element zum Einstellen der Ansicht des aktuell ge&ouml;ffneten Objekts zum benutzerdefinierten Ribbon hinzuf&uuml;gen, brauchen Sie auch hier einfach nur die <b>idMso <\/b>anzugeben &#8211; hier <b>ViewsModeMenu<\/b>:<\/p>\n<pre>&lt;control idMso=\"ViewsModeMenu\" size=\"large\" \/&gt;<\/pre>\n<p>Dies bildet dann das Element exakt ab (siehe Bild 10). Sie brauchen sich also nicht um den Elementtyp zu k&uuml;mmern, sondern tragen einfach nur die <b>idMso <\/b>ein.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_061.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_061.png\" alt=\"Beispiel f&uuml;r eingebaute Elemente im benutzerdefinierten Ribbon\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 10: Beispiel f&uuml;r eingebaute Elemente im benutzerdefinierten Ribbon<\/p>\n<h2>Das dialogBoxLauncher-Element<\/h2>\n<p>Bei manchen eingebauten <b>group<\/b>-Elementen finden Sie unten rechts eine kleine Schaltfl&auml;che mit einem nach rechts unten zeigenden Pfeil (siehe Bild 11). Diese &ouml;ffnet in der Regel einen Dialog mit weiteren Optionen. Auch dieses Element k&ouml;nnen Sie zu Ihren eigenen benutzerdefinierten <b>group<\/b>-Elementen hinzuf&uuml;gen. Dazu verwenden Sie das <b>dialogBoxLauncher<\/b>-Element.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_062.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_062.png\" alt=\"Schaltfl&auml;che zum Anzeigen weiterer Optionen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 11: Schaltfl&auml;che zum Anzeigen weiterer Optionen<\/p>\n<p>Das Beispiel finden Sie in der Tabelle <b>USysRibbons <\/b>unter Beispiel <b>dialogBoxLauncher <\/b>und den VBA-Code im Modul <b>mdlRibbonsDialogBoxLauncher<\/b>.<\/p>\n<p>Das <b>dialogBoxLauncher<\/b>-Element f&uuml;gen Sie der Gruppe hinzu, in der es angezeigt werden soll. Das Element hat keinerlei Attribute. Sie k&ouml;nnen lediglich ein <b>button<\/b>-Element als Unterelement hinzuf&uuml;gen. Dieses legt mit dem <b>on-Action<\/b>-Attribut die Prozedur fest, die beim Anklicken ausgel&ouml;st werden soll.<\/p>\n<p>Au&szlig;erdem wollen wir, damit der Benutzer wei&szlig;, was ein Klick auf dieses Element ausl&ouml;st, einen Hilfstext f&uuml;r das Attribut <b>screentip <\/b>hinterlegen:<\/p>\n<pre>&lt;group id=\"grp0\" label=\"Beispiel dialogBoxLauncher\"&gt;\r\n   &lt;dialogBoxLauncher&gt;\r\n     &lt;button id=\"dbl\" onAction=\"dbl_onAction\"         screentip=\"Weitere Optionen anzeigen ...\" \/&gt;\r\n   &lt;\/dialogBoxLauncher&gt;\r\n&lt;\/group&gt;<\/pre>\n<p>Das Ergebnis sehen Sie in Bild 12.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_063.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_063.png\" alt=\"Beispiel f&uuml;r den dialogBoxLauncher\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 12: Beispiel f&uuml;r den dialogBoxLauncher<\/p>\n<p>F&uuml;r das Callbackattribut hinterlegen wir einfach eine Prozedur, die ein Meldungsfenster anzeigt. Normalerweise k&ouml;nnten Sie hier beispielsweise ein Formular mit weiteren Optionen anzeigen:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>dbl_onAction(control              <span style=\"color:blue;\"><span style=\"color:blue;\"> As <\/span><\/span>IRibbonControl)\r\n     <span style=\"color:blue;\">MsgBox<\/span> \"Weitere Optionen ...\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Formular zur einfachen Suche von tab-, group- und control-Elementen und ihren idMso-Werten<\/h2>\n<p>F&uuml;r die folgenden Beispiele ben&ouml;tigen Sie den Wert des Attributs <b>idMso <\/b>des <b>tab<\/b>&#8211; oder <b>group<\/b>-Elements, in das Sie die Elemente integrieren wollen.<\/p>\n<p>Diese lassen sich normalerweise nicht so einfach ermitteln, denn im Gegensatz zu den Elementen innerhalb der Gruppen finden Sie die Werte f&uuml;r das Attribut <b>idMso <\/b>nicht wie weiter oben beschrieben in den Access-Optionen im Bereich <b>Men&uuml;band anpassen<\/b>.<\/p>\n<p>Als Unterst&uuml;tzung bei der Suche nach <b>idMso<\/b>-Werten von verschiedenen Elementen, die Sie f&uuml;r die Beispiele in den folgenden Abschnitten ben&ouml;tigen, haben wir Ihnen in der Beispieldatenbank ein Formular namens <b>frmRibbonControls <\/b>hinzugef&uuml;gt.<\/p>\n<p>Mit diesem fragen Sie Informationen &uuml;ber die <b>tab<\/b>-, <b>group<\/b>&#8211; und <b>control<\/b>-Elemente ab &#8211; und es gibt auch eine Suchfunktion, mit der Sie nach den Werten der <b>idMso <\/b>und nach den deutschen Bezeichnungen suchen k&ouml;nnen.<\/p>\n<p>Das Formular sieht wie in Bild 13 aus. Hier finden Sie zun&auml;chst zwei Textfelder, mit denen Sie nach der englischen Bezeichnung f&uuml;r die Eigenschaft <b>idMso <\/b>suchen k&ouml;nnen und\/oder nach der Beschriftung im Ribbon in der deutschsprachigen Version von Access. Au&szlig;erdem k&ouml;nnen Sie hier angeben, ob Sie nach dem Namen von <b>tab<\/b>-, <b>group<\/b>-, <b>control<\/b>&#8211; oder <b>gallery<\/b>-Elementen suchen wollen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_066.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_066.png\" alt=\"Das Formular zum Suchen von Ribbon-Elementen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 13: Das Formular zum Suchen von Ribbon-Elementen<\/p>\n<p>Schlie&szlig;lich legen Sie unter Optionen noch fest, ob die Suchergebnisse mit dem angegebenen Suchausdruck beginnen sollen, ob dieser irgendwo enthalten sein soll oder ob Sie eine exakte &Uuml;bereinstimmung w&uuml;nschen.<\/p>\n<p>Das Suchergebnis wird nach der Eingabe eines jeden Buchstaben in die beiden Textfelder oder nach dem Aktualisieren der Kontrollk&auml;stchen oder der Optionsgruppe aktualisiert. Im Beispiel aus dem Screenshot suchen wir nach allen Elementen, deren Wert f&uuml;r die Eigenschaft <b>idMso <\/b>mit Table beginnt.<\/p>\n<p>Im Ergebnis sehen Sie die <b>idMso<\/b>, die deutsche Beschriftung sowie den Elementtyp. Damit haben Sie eine gute Erg&auml;nzung zu der Suchm&ouml;glichkeit &uuml;ber die Access-Optionen (siehe weiter oben), die auch die Namen von <b>tab<\/b>&#8211; und <b>group<\/b>-Elementen umfasst.<\/p>\n<h2>Benutzerdefinierte Elemente in eingebauten tab- und group-Elemente einbauen<\/h2>\n<p>Sie m&uuml;ssen Ihre benutzerdefinierten Elemente nicht unbedingt in jeweils neu angelegte <b>tab<\/b>&#8211; und <b>group<\/b>-Elemente einbauen. Sie k&ouml;nnen diese auch einfach in die eingebauten <b>tab<\/b>&#8211; und <b>group<\/b>-Elemente integrieren.<\/p>\n<p>Nachdem Sie den Namen des gesuchten <b>tab<\/b>&#8211; oder <b>group<\/b>-Elements mithilfe des oben beschriebenen Formulars oder auf andere Weise gefunden haben, k&ouml;nnen Sie diesen eingebauten Elementen benutzerdefinierte Elemente hinzuf&uuml;gen.<\/p>\n<p>Wir wollen wie in Bild 14 eine Gruppe mit einer Schaltfl&auml;che zum Ribbon-Tab <b>Externe Daten <\/b>hinzuf&uuml;gen. Dazu ermitteln wir &uuml;ber das Formular <b>frmRibbonControls <\/b>den Wert der Eigenschaft <b>idMso<\/b>, indem wir f&uuml;r das Feld <b>Beschriftung <\/b>den Text <b>Externe Daten <\/b>eingeben. Dies liefert direkt den Wert <b>TabExternalData <\/b>f&uuml;r die <b>idMso <\/b>des <b>tab<\/b>-Elements.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_068.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_068.png\" alt=\"Einbau einer benutzerdefinierten Gruppe in ein eingebautes tab-Element\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 14: Einbau einer benutzerdefinierten Gruppe in ein eingebautes tab-Element<\/p>\n<p>Diesen Wert nutzen wir dann, um das <b>tab<\/b>-Element wie in der folgenden Ribbondefinition zu referenzieren und darin ein neues <b>group<\/b>-Element mit einem <b>button<\/b>-Element anzulegen:<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\r\n&lt;customUI ... loadImage=\"loadImage\" &gt;\r\n   &lt;ribbon&gt;\r\n     &lt;tabs&gt;\r\n       &lt;tab idMso=\"TabExternalData\"&gt;\r\n         &lt;group id=\"grp0\"             label=\"Beispiel benutzerdefinierte Gruppe\"&gt;\r\n           &lt;button id=\"btn\" \r\n               label=\"Benutzerdefinierter Button\" \r\n               image=\"apple\" size=\"large\" \/&gt;\r\n         &lt;\/group&gt;\r\n       &lt;\/tab&gt;\r\n     &lt;\/tabs&gt;\r\n   &lt;\/ribbon&gt;\r\n&lt;\/customUI&gt;<\/pre>\n<h2>Benutzerdefiniertes group-Element an bestimmter Stelle in eingebauten tab-Elementen platzieren<\/h2>\n<p>Wenn Sie nun nicht m&ouml;chten, dass das neue <b>group<\/b>-Element ganz rechts steht, sondern an einer anderen Position, k&ouml;nnen Sie die folgenden Attribute nutzen:<\/p>\n<ul>\n<li><b>insertAfterMso<\/b>: Geben Sie f&uuml;r diese Attribut den <b>idMso<\/b>-Wert des <b>group<\/b>-Elements an, hinter dem Sie das einzuf&uuml;gende <b>group<\/b>-Element platzieren wollen.<\/li>\n<li><b>insertBeforeMso<\/b>: Geben Sie f&uuml;r diese Attribut den <b>idMso<\/b>-Wert des <b>group<\/b>-Elements an, vor dem Sie das einzuf&uuml;gende <b>group<\/b>-Element platzieren wollen.<\/li>\n<\/ul>\n<p>Wenn Sie das <b>group<\/b>-Element also beispielsweise ganz vorn platzieren wollen, verwenden Sie <b>insertBeforeMso <\/b>und geben als Wert dieses Attributs die <b>idMso <\/b>der Gruppe <b>Importieren und Verkn&uuml;pfen <\/b>an. Auch diese <b>idMso <\/b>finden wir schnell mit dem Formular <b>frmRibbonControls <\/b>heraus. Sein Name lautet <b>GroupImport<\/b>. Die neue Definition f&uuml;r das Element <b>group <\/b>w&uuml;rde nun wie folgt lauten:<\/p>\n<pre>&lt;group id=\"grp0\" label=\"Beispiel benutzerdefinierte       Gruppe\" insertBeforeMso=\"GroupImport\"&gt;\r\n     &lt;button id=\"btn\" label=\"Benutzerdefinierter Button\" \r\n         image=\"apple\" size=\"large\" \/&gt;\r\n&lt;\/group&gt;<\/pre>\n<p>Bild 15 zeigt das Ergebnis. Auf die gleiche Weise gehen Sie mit den anderen Positionen vor.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_069.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_069.png\" alt=\"Einbau einer benutzerdefinierten Gruppe an den Beginn eines eingebauten tab-Elements\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 15: Einbau einer benutzerdefinierten Gruppe an den Beginn eines eingebauten tab-Elements<\/p>\n<h2>Benutzerdefinierte Elemente in eingebauten group-Elementen platzieren<\/h2>\n<p>Benutzerdefinierte Elemente k&ouml;nnen Sie nicht in eingebauten <b>group<\/b>-Elementen platzieren. Wollen Sie dies dennoch tun, k&ouml;nnten Sie die eingebaute Gruppe ausblenden und die Gruppe in einer benutzerdefinierten Gruppe nachbilden, der Sie dann noch Ihre eigenen Elemente hinzuf&uuml;gen.<\/p>\n<p>Um die Gruppe auszublenden, f&uuml;gen wir ein <b>group<\/b>-Element hinzu, das die <b>idMso <\/b>der auszublenden Gruppe aufweist. Damit diese ausgeblendet wird, stellen wir ihr Attribut <b>visible <\/b>auf den Wert <b>false <\/b>ein (siehe Listing 7). Dann f&uuml;gen wir eine neue, benutzerdefinierte Gruppe hinzu, welche die gleiche Beschriftung erh&auml;lt und deren Position wir mit dem Attribut <b>insertBeforeMso <\/b>einstellen.<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\r\n&lt;customUI xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\" loadImage=\"loadImage\" &gt;\r\n   &lt;ribbon&gt;\r\n     &lt;tabs&gt;\r\n       &lt;tab idMso=\"TabCreate\"&gt;\r\n         &lt;group idMso=\"GroupCreateTables\" visible=\"false\" \/&gt;\r\n         &lt;group id=\"grpGroupCreateTables\" insertBeforeMso=\"GroupCreateClientQuery\"&gt;\r\n           &lt;button idMso=\"CreateTable\" size=\"large\" \/&gt;\r\n           &lt;button idMso=\"CreateTableInDesignView\" size=\"large\" \/&gt;\r\n           &lt;button idMso=\"DatabaseMoveToSharePoint\" size=\"large\" \/&gt;\r\n           &lt;button id=\"btn\" label=\"Benutzerdefinierter Button\" image=\"apple\" size=\"large\" \/&gt;\r\n         &lt;\/group&gt;\r\n       &lt;\/tab&gt;\r\n     &lt;\/tabs&gt;\r\n   &lt;\/ribbon&gt;\r\n&lt;\/customUI&gt;<\/pre>\n<p class='imagetext'>Listing 7: Code f&uuml;r den Nachbau einer eingebauten Gruppe mit benutzerdefiniertem button-Element<\/p>\n<p>In dieser legen wir dann zun&auml;chst die drei eingebauten Elemente <b>CreateTable<\/b>, <b>CreateTableInDesignView <\/b>und <b>DatabaseMoveToSharePoint <\/b>an und stellen <b>size <\/b>auf <b>large <\/b>ein, damit diese in der gleichen Gr&ouml;&szlig;e wie im Original erscheinen.<\/p>\n<p>Schlie&szlig;lich f&uuml;gen wir die benutzerdefinierte Schaltfl&auml;che hinzu, die dann wie in Bild 16 aussieht.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_070.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_070.png\" alt=\"Nachbau einer eingebauten Gruppe mit neuem button-Element\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 16: Nachbau einer eingebauten Gruppe mit neuem button-Element<\/p>\n<h2>Eingebaute Elemente an anderer Stelle einbauen<\/h2>\n<p>Vielleicht m&ouml;chten Sie auch eingebaute Elemente an einer Stelle einbauen, wo diese f&uuml;r Sie besser zugreifbar sind. Oder Sie m&ouml;chten einfach die vorhandenen Elemente umarrangieren, etwa weil diese zu klein oder zu gro&szlig; angezeigt werden. Mir ist beispielsweise immer die Anzeige der Steuerelemente im Bereich <b>Steuerelemente <\/b>im <b>tab<\/b>-Element <b>Entwurf <\/b>ein Dorn im Auge. Es ist schlicht unergonomisch, wenn man nur acht Steuerelemente direkt anklicken kann und f&uuml;r alle &uuml;brigen erst noch ein Men&uuml; aufklappen muss wie in Bild 17.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_543_071.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_543_071.png\" alt=\"Die meisten Schaltfl&auml;chen f&uuml;r das Hinzuf&uuml;gen der Steuerelemente erst durch Aufklappen einer Liste zu erreichen.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 17: Die meisten Schaltfl&auml;chen f&uuml;r das Hinzuf&uuml;gen der Steuerelemente erst durch Aufklappen einer Liste zu erreichen.<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000543\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000543?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000543\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"29a9ab4ae1\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Ribbon, in der deutschen Version von Office auch Men&uuml;band genannt, ist die Men&uuml;leiste f&uuml;r Office-Anwendungen und somit auch f&uuml;r Access. Sie k&ouml;nnen die Befehle im Ribbon jedoch nicht nur w&auml;hrend der Entwicklung von Access-Anwendungen nutzen, sondern dieses f&uuml;r eigene Anwendungen so anpassen, dass der Benutzer die Funktionen dieser Anwendung dar&uuml;ber aufrufen kann. Dabei k&ouml;nnen Sie die eingebauten Elemente sogar weitgehend ausblenden, sodass man Ihrer Anwendung nur noch an wenigen Stellen ansieht, dass es sich &uuml;berhaupt um eine Access-Anwendung handelt. Diese Artikelreihe liefert alle Informationen, die Sie f&uuml;r die Arbeit mit dem Ribbon und f&uuml;r seine Anpassung und Programmierung ben&ouml;tigen. Dabei lernen Sie auch alle Steuerelemente und ihre Eigenschaften kennen.<\/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":[662021,66062021,44000005],"tags":[],"class_list":["post-55000543","post","type-post","status-publish","format-standard","hentry","category-662021","category-66062021","category-AccessBenutzeroberflaeche"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ribbon anpassen, Teil 2  - Access [basics]<\/title>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ribbon anpassen, Teil 2  - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Das Ribbon, in der deutschen Version von Office auch Men&uuml;band genannt, ist die Men&uuml;leiste f&uuml;r Office-Anwendungen und somit auch f&uuml;r Access. Sie k&ouml;nnen die Befehle im Ribbon jedoch nicht nur w&auml;hrend der Entwicklung von Access-Anwendungen nutzen, sondern dieses f&uuml;r eigene Anwendungen so anpassen, dass der Benutzer die Funktionen dieser Anwendung dar&uuml;ber aufrufen kann. Dabei k&ouml;nnen Sie die eingebauten Elemente sogar weitgehend ausblenden, sodass man Ihrer Anwendung nur noch an wenigen Stellen ansieht, dass es sich &uuml;berhaupt um eine Access-Anwendung handelt. Diese Artikelreihe liefert alle Informationen, die Sie f&uuml;r die Arbeit mit dem Ribbon und f&uuml;r seine Anpassung und Programmierung ben&ouml;tigen. Dabei lernen Sie auch alle Steuerelemente und ihre Eigenschaften kennen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-01T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_543_052.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"63\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_543_052.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html\",\"name\":\"Ribbon anpassen, Teil 2 - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#primaryimage\"},\"datePublished\":\"2021-12-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html\",\"name\":\"Ribbon anpassen, Teil 2\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000543"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000543\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}