{"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\">Passwort<\/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\">Angemeldet bleiben<\/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=\"7a5ad64b41\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Anmelden\"\/>\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,"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":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"Das Ribbon, in der deutschen Version von Office auch Men\u00fcband genannt, ist die Men\u00fcleiste f\u00fcr Office-Anwendungen und somit auch f\u00fcr Access. Sie k\u00f6nnen die Befehle im Ribbon jedoch nicht nur w\u00e4hrend der Entwicklung von Access-Anwendungen nutzen, sondern dieses f\u00fcr eigene Anwendungen so anpassen, dass der Benutzer die Funktionen dieser Anwendung dar\u00fcber aufrufen kann. Dabei k\u00f6nnen Sie die eingebauten Elemente sogar weitgehend ausblenden, sodass man Ihrer Anwendung nur noch an wenigen Stellen ansieht, dass es sich \u00fcberhaupt um eine Access-Anwendung handelt. Diese Artikelreihe liefert alle Informationen, die Sie f\u00fcr die Arbeit mit dem Ribbon und f\u00fcr seine Anpassung und Programmierung ben\u00f6tigen. Dabei lernen Sie auch alle Steuerelemente und ihre Eigenschaften kennen.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Andr\u00e9 Minhorst\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Access [basics] - DAS ACCESS-MAGAZIN F\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Ribbon anpassen, Teil 2 - Access [basics]\" \/>\n\t\t<meta property=\"og:description\" content=\"Das Ribbon, in der deutschen Version von Office auch Men\u00fcband genannt, ist die Men\u00fcleiste f\u00fcr Office-Anwendungen und somit auch f\u00fcr Access. Sie k\u00f6nnen die Befehle im Ribbon jedoch nicht nur w\u00e4hrend der Entwicklung von Access-Anwendungen nutzen, sondern dieses f\u00fcr eigene Anwendungen so anpassen, dass der Benutzer die Funktionen dieser Anwendung dar\u00fcber aufrufen kann. Dabei k\u00f6nnen Sie die eingebauten Elemente sogar weitgehend ausblenden, sodass man Ihrer Anwendung nur noch an wenigen Stellen ansieht, dass es sich \u00fcberhaupt um eine Access-Anwendung handelt. Diese Artikelreihe liefert alle Informationen, die Sie f\u00fcr die Arbeit mit dem Ribbon und f\u00fcr seine Anpassung und Programmierung ben\u00f6tigen. Dabei lernen Sie auch alle Steuerelemente und ihre Eigenschaften kennen.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png\" \/>\n\t\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t\t<meta property=\"og:image:height\" content=\"127\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2021-12-01T00:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"-001-11-30T00:00:00+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Ribbon anpassen, Teil 2 - Access [basics]\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Das Ribbon, in der deutschen Version von Office auch Men\u00fcband genannt, ist die Men\u00fcleiste f\u00fcr Office-Anwendungen und somit auch f\u00fcr Access. Sie k\u00f6nnen die Befehle im Ribbon jedoch nicht nur w\u00e4hrend der Entwicklung von Access-Anwendungen nutzen, sondern dieses f\u00fcr eigene Anwendungen so anpassen, dass der Benutzer die Funktionen dieser Anwendung dar\u00fcber aufrufen kann. Dabei k\u00f6nnen Sie die eingebauten Elemente sogar weitgehend ausblenden, sodass man Ihrer Anwendung nur noch an wenigen Stellen ansieht, dass es sich \u00fcberhaupt um eine Access-Anwendung handelt. Diese Artikelreihe liefert alle Informationen, die Sie f\u00fcr die Arbeit mit dem Ribbon und f\u00fcr seine Anpassung und Programmierung ben\u00f6tigen. Dabei lernen Sie auch alle Steuerelemente und ihre Eigenschaften kennen.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/Ribbon_anpassen_Teil_2_.html#blogposting\",\"name\":\"Ribbon anpassen, Teil 2 - Access [basics]\",\"headline\":\"Ribbon anpassen, Teil 2\",\"author\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/author\\\/andreminhorst-com#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"..\\\/tl_files\\\/images\\\/pic_543_052.png\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/Ribbon_anpassen_Teil_2_.html\\\/#articleImage\"},\"datePublished\":\"2021-12-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"inLanguage\":\"de-DE\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/Ribbon_anpassen_Teil_2_.html#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/Ribbon_anpassen_Teil_2_.html#webpage\"},\"articleSection\":\"2021, 6\\\/2021, Access-Benutzeroberfl&auml;che\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/Ribbon_anpassen_Teil_2_.html#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-basics.de\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2021#listItem\",\"name\":\"2021\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2021#listItem\",\"position\":2,\"name\":\"2021\",\"item\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2021\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2021\\\/6\\\/2021#listItem\",\"name\":\"6\\\/2021\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2021\\\/6\\\/2021#listItem\",\"position\":3,\"name\":\"6\\\/2021\",\"item\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2021\\\/6\\\/2021\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/Ribbon_anpassen_Teil_2_.html#listItem\",\"name\":\"Ribbon anpassen, Teil 2\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2021#listItem\",\"name\":\"2021\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/Ribbon_anpassen_Teil_2_.html#listItem\",\"position\":4,\"name\":\"Ribbon anpassen, Teil 2\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2021\\\/6\\\/2021#listItem\",\"name\":\"6\\\/2021\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/#organization\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"url\":\"https:\\\/\\\/access-basics.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/access-basics.de\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/logo400.png\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/Ribbon_anpassen_Teil_2_.html\\\/#organizationLogo\",\"width\":400,\"height\":127},\"image\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/Ribbon_anpassen_Teil_2_.html\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/author\\\/andreminhorst-com#author\",\"url\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/author\\\/andreminhorst-com\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/Ribbon_anpassen_Teil_2_.html#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Andr\\u00e9 Minhorst\"}},{\"@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]\",\"description\":\"Das Ribbon, in der deutschen Version von Office auch Men\\u00fcband genannt, ist die Men\\u00fcleiste f\\u00fcr Office-Anwendungen und somit auch f\\u00fcr Access. Sie k\\u00f6nnen die Befehle im Ribbon jedoch nicht nur w\\u00e4hrend der Entwicklung von Access-Anwendungen nutzen, sondern dieses f\\u00fcr eigene Anwendungen so anpassen, dass der Benutzer die Funktionen dieser Anwendung dar\\u00fcber aufrufen kann. Dabei k\\u00f6nnen Sie die eingebauten Elemente sogar weitgehend ausblenden, sodass man Ihrer Anwendung nur noch an wenigen Stellen ansieht, dass es sich \\u00fcberhaupt um eine Access-Anwendung handelt. Diese Artikelreihe liefert alle Informationen, die Sie f\\u00fcr die Arbeit mit dem Ribbon und f\\u00fcr seine Anpassung und Programmierung ben\\u00f6tigen. Dabei lernen Sie auch alle Steuerelemente und ihre Eigenschaften kennen.\",\"inLanguage\":\"de-DE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/Ribbon_anpassen_Teil_2_.html#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/author\\\/andreminhorst-com#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/author\\\/andreminhorst-com#author\"},\"datePublished\":\"2021-12-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\"},{\"@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\",\"inLanguage\":\"de-DE\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Ribbon anpassen, Teil 2 - Access [basics]","description":"Das Ribbon, in der deutschen Version von Office auch Men\u00fcband genannt, ist die Men\u00fcleiste f\u00fcr Office-Anwendungen und somit auch f\u00fcr Access. Sie k\u00f6nnen die Befehle im Ribbon jedoch nicht nur w\u00e4hrend der Entwicklung von Access-Anwendungen nutzen, sondern dieses f\u00fcr eigene Anwendungen so anpassen, dass der Benutzer die Funktionen dieser Anwendung dar\u00fcber aufrufen kann. Dabei k\u00f6nnen Sie die eingebauten Elemente sogar weitgehend ausblenden, sodass man Ihrer Anwendung nur noch an wenigen Stellen ansieht, dass es sich \u00fcberhaupt um eine Access-Anwendung handelt. Diese Artikelreihe liefert alle Informationen, die Sie f\u00fcr die Arbeit mit dem Ribbon und f\u00fcr seine Anpassung und Programmierung ben\u00f6tigen. Dabei lernen Sie auch alle Steuerelemente und ihre Eigenschaften kennen.","canonical_url":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#blogposting","name":"Ribbon anpassen, Teil 2 - Access [basics]","headline":"Ribbon anpassen, Teil 2","author":{"@id":"https:\/\/access-basics.de\/index.php\/author\/andreminhorst-com#author"},"publisher":{"@id":"https:\/\/access-basics.de\/#organization"},"image":{"@type":"ImageObject","url":"..\/tl_files\/images\/pic_543_052.png","@id":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html\/#articleImage"},"datePublished":"2021-12-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00","inLanguage":"de-DE","mainEntityOfPage":{"@id":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#webpage"},"isPartOf":{"@id":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#webpage"},"articleSection":"2021, 6\/2021, Access-Benutzeroberfl&auml;che"},{"@type":"BreadcrumbList","@id":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/access-basics.de\/#listItem","position":1,"name":"Home","item":"https:\/\/access-basics.de\/","nextItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2021#listItem","name":"2021"}},{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2021#listItem","position":2,"name":"2021","item":"https:\/\/access-basics.de\/index.php\/category\/2021","nextItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2021\/6\/2021#listItem","name":"6\/2021"},"previousItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2021\/6\/2021#listItem","position":3,"name":"6\/2021","item":"https:\/\/access-basics.de\/index.php\/category\/2021\/6\/2021","nextItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#listItem","name":"Ribbon anpassen, Teil 2"},"previousItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2021#listItem","name":"2021"}},{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#listItem","position":4,"name":"Ribbon anpassen, Teil 2","previousItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2021\/6\/2021#listItem","name":"6\/2021"}}]},{"@type":"Organization","@id":"https:\/\/access-basics.de\/#organization","name":"Access [basics]","description":"DAS ACCESS-MAGAZIN F\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN","url":"https:\/\/access-basics.de\/","logo":{"@type":"ImageObject","url":"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png","@id":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html\/#organizationLogo","width":400,"height":127},"image":{"@id":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/access-basics.de\/index.php\/author\/andreminhorst-com#author","url":"https:\/\/access-basics.de\/index.php\/author\/andreminhorst-com","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","@id":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","width":96,"height":96,"caption":"Andr\u00e9 Minhorst"}},{"@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]","description":"Das Ribbon, in der deutschen Version von Office auch Men\u00fcband genannt, ist die Men\u00fcleiste f\u00fcr Office-Anwendungen und somit auch f\u00fcr Access. Sie k\u00f6nnen die Befehle im Ribbon jedoch nicht nur w\u00e4hrend der Entwicklung von Access-Anwendungen nutzen, sondern dieses f\u00fcr eigene Anwendungen so anpassen, dass der Benutzer die Funktionen dieser Anwendung dar\u00fcber aufrufen kann. Dabei k\u00f6nnen Sie die eingebauten Elemente sogar weitgehend ausblenden, sodass man Ihrer Anwendung nur noch an wenigen Stellen ansieht, dass es sich \u00fcberhaupt um eine Access-Anwendung handelt. Diese Artikelreihe liefert alle Informationen, die Sie f\u00fcr die Arbeit mit dem Ribbon und f\u00fcr seine Anpassung und Programmierung ben\u00f6tigen. Dabei lernen Sie auch alle Steuerelemente und ihre Eigenschaften kennen.","inLanguage":"de-DE","isPartOf":{"@id":"https:\/\/access-basics.de\/#website"},"breadcrumb":{"@id":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html#breadcrumblist"},"author":{"@id":"https:\/\/access-basics.de\/index.php\/author\/andreminhorst-com#author"},"creator":{"@id":"https:\/\/access-basics.de\/index.php\/author\/andreminhorst-com#author"},"datePublished":"2021-12-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00"},{"@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","inLanguage":"de-DE","publisher":{"@id":"https:\/\/access-basics.de\/#organization"}}]},"og:locale":"de_DE","og:site_name":"Access [basics] - DAS ACCESS-MAGAZIN F\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN","og:type":"article","og:title":"Ribbon anpassen, Teil 2 - Access [basics]","og:description":"Das Ribbon, in der deutschen Version von Office auch Men\u00fcband genannt, ist die Men\u00fcleiste f\u00fcr Office-Anwendungen und somit auch f\u00fcr Access. Sie k\u00f6nnen die Befehle im Ribbon jedoch nicht nur w\u00e4hrend der Entwicklung von Access-Anwendungen nutzen, sondern dieses f\u00fcr eigene Anwendungen so anpassen, dass der Benutzer die Funktionen dieser Anwendung dar\u00fcber aufrufen kann. Dabei k\u00f6nnen Sie die eingebauten Elemente sogar weitgehend ausblenden, sodass man Ihrer Anwendung nur noch an wenigen Stellen ansieht, dass es sich \u00fcberhaupt um eine Access-Anwendung handelt. Diese Artikelreihe liefert alle Informationen, die Sie f\u00fcr die Arbeit mit dem Ribbon und f\u00fcr seine Anpassung und Programmierung ben\u00f6tigen. Dabei lernen Sie auch alle Steuerelemente und ihre Eigenschaften kennen.","og:url":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html","og:image":"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png","og:image:secure_url":"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png","og:image:width":400,"og:image:height":127,"article:published_time":"2021-12-01T00:00:00+00:00","article:modified_time":"-001-11-30T00:00:00+00:00","twitter:card":"summary_large_image","twitter:title":"Ribbon anpassen, Teil 2 - Access [basics]","twitter:description":"Das Ribbon, in der deutschen Version von Office auch Men\u00fcband genannt, ist die Men\u00fcleiste f\u00fcr Office-Anwendungen und somit auch f\u00fcr Access. Sie k\u00f6nnen die Befehle im Ribbon jedoch nicht nur w\u00e4hrend der Entwicklung von Access-Anwendungen nutzen, sondern dieses f\u00fcr eigene Anwendungen so anpassen, dass der Benutzer die Funktionen dieser Anwendung dar\u00fcber aufrufen kann. Dabei k\u00f6nnen Sie die eingebauten Elemente sogar weitgehend ausblenden, sodass man Ihrer Anwendung nur noch an wenigen Stellen ansieht, dass es sich \u00fcberhaupt um eine Access-Anwendung handelt. Diese Artikelreihe liefert alle Informationen, die Sie f\u00fcr die Arbeit mit dem Ribbon und f\u00fcr seine Anpassung und Programmierung ben\u00f6tigen. Dabei lernen Sie auch alle Steuerelemente und ihre Eigenschaften kennen.","twitter:image":"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png"},"aioseo_meta_data":{"post_id":"55000543","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2024-01-27 22:11:13","updated":"2026-10-19 17:14:59","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/access-basics.de\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/access-basics.de\/index.php\/category\/2021\" title=\"2021\">2021<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/access-basics.de\/index.php\/category\/2021\/6\/2021\" title=\"6\/2021\">6\/2021<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tRibbon anpassen, Teil 2\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/access-basics.de\/"},{"label":"2021","link":"https:\/\/access-basics.de\/index.php\/category\/2021"},{"label":"6\/2021","link":"https:\/\/access-basics.de\/index.php\/category\/2021\/6\/2021"},{"label":"Ribbon anpassen, Teil 2","link":"https:\/\/access-basics.de\/index.php\/Ribbon_anpassen_Teil_2_.html"}],"_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}]}}