{"id":55001024,"date":"2016-02-01T00:00:00","date_gmt":"2021-03-22T16:34:21","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1024"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Rund_um_das_Access_Ribbon","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/","title":{"rendered":"Rund um das Access Ribbon"},"content":{"rendered":"<p><b>Das Access Ribbon und seine Programmierung enth\u00e4lt immer noch viele Geheimnisse f\u00fcr uns Access-Entwickler. Dieser Beitrag zeigt einige Techniken, mit denen Sie oft angefragte Konstellationen erhalten &#8211; beispielsweise das Ein- und Ausblenden zus\u00e4tzlicher Ribbon-Elemente mit der Anzeige bestimmter Formulare oder auch das Aktivieren und Deaktivieren von Steuerelementen oder kompletter Ribbon-Bereiche in Abh\u00e4ngigkeit vom Vorhandensein bestimmter Elemente der Benutzeroberfl\u00e4che.<\/b><\/p>\n<h2>Voraussetzungen<\/h2>\n<p>F\u00fcr die nachfolgenden Beispiele zum Access Ribbon ben\u00f6tigen Sie ein paar Elemente:<\/p>\n<p>Die Tabelle <b>USysRibbons <\/b>aus Bild 1 nimmt die Ribbon-Definitionen auf. Sie enth\u00e4lt drei Felder: <b>ID <\/b>ist das Prim\u00e4rschl\u00fcsselfeld, <b>RibbonName <\/b>speichert den Namen der Ribbon-Definition, der auch in der Eigenschaft <b>Name des Men\u00fcbands <\/b>etwa von Formularen erscheint, und <b>RibbonXML <\/b>schlie\u00dflich liefert die eigentliche Ribbon-Definition im XML-Format.<\/p>\n<p class=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1024_002.png\" alt=\"Die Tabelle USysRibbons speichert die Ribbon-Definitionen der Anwendung.\" width=\"500\" height=\"250\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 1: Die Tabelle USysRibbons speichert die Ribbon-Definitionen der Anwendung.<\/span><\/b><\/p>\n<p>Die Tabelle <b>MSysResources <\/b>speichert die Bilddateien, die das Ribbon anzeigen soll (entweder in der Gr\u00f6\u00dfe 16&#215;16 oder 32&#215;32) in einem Anlagefeld (s. Bild 2). Den Wert des Feldes <b>Name <\/b>ben\u00f6tigen Sie, wenn Sie eines der hier gespeicherten Bilder im Ribbon anzeigen m\u00f6chten.<\/p>\n<p class=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1024_003.png\" alt=\"Die Tabelle MSysResources speichert Bilddateien.\" width=\"425\" height=\"150\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 2: Die Tabelle MSysResources speichert Bilddateien.<\/span><\/b><\/p>\n<p>Das Modul <b>mdlRibbonImages <\/b>enth\u00e4lt einige Funktionen rund um die Anzeige von Bildern im Ribbon, vor allem aber die Funktion <b>PicFromSharedResource_Ribbon<\/b>. Diese erwartet den Namen einer Bilddatei aus der Tabelle <b>USysResources<\/b>, also den Wert des Feldes <b>Name <\/b>der gew\u00fcnschten Bilddatei.<\/p>\n<p>Damit das Access Ribbon die Bilder anzeigt, m\u00fcssen Sie dem Attribut <b>loadImage <\/b>des <b>customUI<\/b>-Elements den Wert <b>loadImage <\/b>zuweisen (<b>loadImage=&#8220;loadImage&#8220;<\/b>). Diese Funktion wird immer dann aufgerufen, wenn das Attribut <b>image <\/b>eines Ribbon-Elements den Namen eines Bildes enth\u00e4lt, also zum Beispiel <b>close<\/b>.<\/p>\n<p>Die Funktion <b>loadImage<\/b> finden Sie im Modul <b>mdlRibbon<\/b>, wo wir gleich auch weitere Callback-Funktionen eintragen, die etwa das Anklicken eines Ribbon-Elements ausl\u00f6st.<\/p>\n<p>Au\u00dferdem ben\u00f6tigen Sie einen Verweis auf die Bibliothek <b>Microsoft Office x.0 Object Library <\/b>f\u00fcr die Verwendung einiger VBA-Elemente f\u00fcr den Zugriff auf das Ribbon.<\/p>\n<h2>Access Ribbon-Definition mit Formular einblenden<\/h2>\n<p>Wenn Sie eine Ribbon-Definition erstellen, die formular-abh\u00e4ngige Elemente enth\u00e4lt, m\u00fcssen Sie einfach nur den Namen der in der Tabelle <b>USysRibbons <\/b>gespeicherten Definition als Wert der Eigenschaft <b>Name des Men\u00fcbands <\/b>f\u00fcr das Formular hinterlegen. Wenn Sie dann noch das Attribut <b>startFromScratch <\/b>des Elements <b>customUI <\/b>auf <b>True <\/b>einstellen, blendet die Ribbon-Definition alle eingebauten Ribbon-Elemente aus und zeigt nur noch die benutzerdefinierten Elemente an.<\/p>\n<p>Dies sieht dann beispielsweise wie in Bild 3 aus. Das Ribbon mit der Schaltfl\u00e4che <b>Formular schlie\u00dfen <\/b>als einzigem Element wird eingeblendet, wenn der Benutzer das Formular <b>frmFormularMitEigenerDefinition <\/b>\u00f6ffnet.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1024_004.png\" alt=\"Beispiel f\u00fcr ein Ribbon-Tab, das zusammen mit einem Formular eingeblendet wird\" width=\"500\" height=\"305,3746\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 3: Beispiel f\u00fcr ein Ribbon-Tab, das zusammen mit einem Formular eingeblendet wird<\/span><\/b><\/p>\n<p>Die Ribbon-Definition f\u00fcr dieses Beispiel finden Sie in Listing 1. Hier beginnen wir mit dem Element <b>customUI<\/b>, das f\u00fcr das Attribut <b>loadImage <\/b>den Wert <b>loadImage <\/b>enth\u00e4lt. Dies ist wichtig, damit Access sp\u00e4ter auftauchende <b>image<\/b>-Attribute so verarbeitet, dass es die Funktion <b>loadImage <\/b>im Modul <b>mdlRibbon <\/b>aufruft und so die Bilddatei aus der Tabelle <b>USysResources <\/b>einliest und im Ribbon anzeigt.<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\n&lt;customUI xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\" loadImage=\"loadImage\"&gt;\n   &lt;ribbon startFromScratch=\"true\"&gt;\n     &lt;tabs&gt;\n       &lt;tab id=\"tab1\" label=\"Formulartab\"&gt;\n         &lt;group id=\"grp1\" label=\"Formulargruppe\"&gt;\n           &lt;button id=\"btnFormularSchliessen\" image=\"close\" label=\"Formular schlie\u00dfen\" onAction=\"onAction\" size=\"large\"\/&gt;\n         &lt;\/group&gt;\n       &lt;\/tab&gt;\n     &lt;\/tabs&gt;\n   &lt;\/ribbon&gt;\n&lt;\/customUI&gt;<\/pre>\n<p><b><span style=\"color: darkgrey;\">Listing 1: Ribbon-Definition f\u00fcr ein Access Ribbon, das bei Anzeige seines Formulars alle anderen Elemente ausblendet<\/span><\/b><\/p>\n<h2 data-tadv-p=\"keep\">startFromScratch f\u00fcr ein leeres Access Ribbon<\/h2>\n<p>Das <b>ribbon<\/b>-Element enth\u00e4lt das Attribut <b>startFromScratch <\/b>mit dem Wert <b>true<\/b>, was daf\u00fcr sorgt, dass alle eingebauten Elemente des Ribbons verschwinden.<\/p>\n<p>Das <b>tabs<\/b>-Element fasst ein oder mehrere <b>tab<\/b>-Elemente zusammen, die den Registerreitern im Ribbon entsprechen. Das einzige <b>tab<\/b>-Element ist dann auch das mit der Beschriftung <b>Formulartab<\/b> aus der Abbildung. Gleiches gilt f\u00fcr das <b>group<\/b>-Element, das im Wesentlichen die Benennung der Gruppe beisteuert.<\/p>\n<p>Fehlt noch die Schaltfl\u00e4che mit dem Wert <b>btnFormularSchliessen <\/b>f\u00fcr das Attribut <b>id<\/b>. Der Wert <b>close <\/b>f\u00fcr das Attribut <b>image <\/b>sorgt daf\u00fcr, dass das Bild namens <b>close <\/b>aus der Tabelle <b>USysResources <\/b>geladen wird. Dieses wird nach dem Laden gro\u00df dargestellt, also mit einer Aufl\u00f6sung von 32&#215;32 Pixeln (<b>size=&#8220;large&#8220;<\/b>). Schlie\u00dflich soll ein Klick auf die Schaltfl\u00e4che die VBA-Funktion <b>onAction <\/b>ausl\u00f6sen (<b>onAction=&#8220;onAction&#8220;<\/b>). Diese Funktion sieht so aus:<\/p>\n<pre><span style=\"color: blue;\">Sub <\/span>onAction(control<span style=\"color: blue;\"> As <\/span>IRibbonControl)\n     Select Case control.ID\n         <span style=\"color: blue;\">Case Else<\/span>\n             DoCmd.Close acForm, Screen.ActiveForm.Name\n     <span style=\"color: blue;\">End Select<\/span>\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Die Callback-Funktion enth\u00e4lt eine <b>Select Case<\/b>-Bedingung, weil verschiedene Schaltfl\u00e4chen die Callback-Funktion aufrufen. In unserem Fall soll diese standardm\u00e4\u00dfig das aktuelle Formular schlie\u00dfen, was die Anweisung <b>DoCmd.Close acForm, Screen.ActiveForm.Name <\/b>zuverl\u00e4ssig erledigt.<\/p>\n<h2>Ribbon-Tab mit Formular einblenden<\/h2>\n<p>Sie k\u00f6nnen auch, wie es etwa bei der Datenblattansicht der Fall ist, einfach ein zus\u00e4tzliches Tab einf\u00fcgen, das speziell gekennzeichnet und direkt im Vordergrund angezeigt wird &#8211; ein sogenanntes kontextabh\u00e4ngiges <b>tab<\/b>-Element.<\/p>\n<p>Dies sieht dann beispielsweise wie in Bild 4 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1024_001.png\" alt=\"Beispiel f\u00fcr ein kontextabh\u00e4ngiges Ribbon-Tab\" width=\"500\" height=\"311,9336\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 4: Beispiel f\u00fcr ein kontextabh\u00e4ngiges Ribbon-Tab<\/span><\/b><\/p>\n<p>Die notwendige Ribbon-Definition finden Sie in Listing 2. Statt des <b>tabs<\/b>-Elements verwenden wir hier das <b>contextualTabs<\/b>-Element, dem wiederum ein <b>tabSet<\/b>-Element untergeordnet ist.<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\n&lt;customUI xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\" loadImage=\"loadImage\"&gt;\n   &lt;ribbon&gt;\n     &lt;contextualTabs&gt;\n       &lt;tab<span style=\"color: blue;\">Set<\/span> idMso=\"TabSetFormReportExtensibility\"&gt;\n         &lt;tab id=\"tab1\" label=\"Formulartab\"&gt;\n           &lt;group id=\"grp1\" label=\"Formulargruppe\"&gt;\n             &lt;button image=\"close\" label=\"Formular schlie\u00dfen\" id=\"btnFormularSchliessen\" onAction=\"onAction\" \n               size=\"large\"\/&gt;\n           &lt;\/group&gt;\n         &lt;\/tab&gt;\n       &lt;\/tabSet&gt;\n     &lt;\/contextualTabs&gt;\n   &lt;\/ribbon&gt;\n&lt;\/customUI&gt;<\/pre>\n<p><b><span style=\"color: darkgrey;\">Listing 2: Ribbon-Definition f\u00fcr ein Ribbon, das mit einem Formular eingeblendet wird<\/span><\/b><\/p>\n<p>Erst darunter geht es wie gewohnt weiter &#8211; und zwar mit dem <b>tab<\/b>-Element, dem <b>group<\/b>-Element und dem <b>button<\/b>-Element (und weiteren Elementen, je nach Ihren Anforderungen). Das <b>tabSet<\/b>-Element m\u00fcssen Sie unbedingt mit dem Wert <b>TabSetFormReportExtensibility <\/b>f\u00fcr das Attribut <b>idMso <\/b>ausstatten. Dies gibt an, dass danach benutzerdefinierte Elemente folgen, die beim Aktivieren eines Formulars oder Berichts erscheinen, dessen Eigenschaft <b>Name des Men\u00fcbands <\/b>auf den Namen der Ribbon-Definition eingestellt ist.<\/p>\n<p>Dummerweise wird das zus\u00e4tzliche Tab nur dann direkt in den Vordergrund geholt, wenn Sie das Formular zum ersten Mal \u00f6ffnen. Au\u00dferdem st\u00f6rt noch etwas die \u00fcbergeordnete Beschriftung, die sich scheinbar nach dem Formularnamen richtet (hier <b>FRMFORMULARMITZUSATZTAB<\/b>).<\/p>\n<p>Dies l\u00e4sst sich leicht \u00e4ndern: Wir tragen einfach den Wert <b>Formular mit Zusatztab <\/b>in die Eigenschaft <b>Beschriftung <\/b>des Formulars <b>frmFormularMitZusatztab <\/b>ein, um die \u00dcberschrift zu \u00e4ndern.<\/p>\n<h2 data-tadv-p=\"keep\">Aktivierung beim \u00d6ffnen des Formulars<\/h2>\n<p>Fehlt allerdings noch die direkte Aktivierung auch nach dem ersten \u00d6ffnen des Formulars. Dazu ist ein kleiner Trick erforderlich: Sie m\u00fcssen die Ribbon-Definition beim Erstellen mit einer entsprechenden VBA-Objektvariable referenzieren und k\u00f6nnen das gew\u00fcnschte <b>tab<\/b>-Element dann nach \u00f6ffnen des Formulars zuverl\u00e4ssig in den Vordergrund holen &#8211; auch nach dem ersten \u00f6ffnen des Formulars, wo dies automatisch geschieht.<\/p>\n<p>Dazu sind folgende Schritte n\u00f6tig:<\/p>\n<ul>\n<li>Hinzuf\u00fcgen des Attributs <b>onLoad <\/b>zum Element <b>custom-UI <\/b>mit dem Wert <b>OnLoad_Formularribbon<\/b><\/li>\n<li>Deklarieren einer Variablen namens <b>objRibbon_Formularribbon <\/b>des Typs <b>IRibbonUI<\/b>, welche den Verweis auf die Ribbon-Anpassung speichert im Modul <b>mdlRibbons<\/b><\/li>\n<li>Anlegen einer Callback-Funktion namens <b>OnLoad_Formularribbon<\/b>, die beim Laden des Ribbons ausgel\u00f6st wird und die Variable <b>objRibbon_Formularribbon <\/b>mit dem Verweis auf die Ribbon-Erweiterung f\u00fcllt (dies ist der einzige Zeitpunkt, an dem dies m\u00f6glich ist)<\/li>\n<li>Anlegen einer Ereignisprozedur im Formular, welche das benutzerdefinierte <b>tab<\/b>-Element der Ribbon-Definition nach dem \u00f6ffnen in den Vordergrund holt<\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p>Die Access Ribbon-Definition passen Sie wie folgt an und erg\u00e4nzen dabei das Attribut <b>onLoad <\/b>des <b>customUI<\/b>-Elements mit dem Wert <b>OnLoad_Formularribbon<\/b>:<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\n&lt;customUI xmlns=\"...\" onLoad=\"OnLoad_Formularribbon\"\n    loadImage=\"loadImage\"&gt;\n   &lt;ribbon&gt;\n     &lt;contextualTabs&gt;\n     ...\n     &lt;\/contextualTabs&gt;\n   &lt;\/ribbon&gt;\n&lt;\/customUI&gt;<\/pre>\n<\/p>\n<p>Die Deklaration der Variablen sieht wie folgt aus:<\/p>\n<pre><span style=\"color: blue;\">Public <\/span>objRibbon_Formularribbon<span style=\"color: blue;\"> As <\/span>IRibbonUI<\/pre>\n<p>Die Prozedur, die durch das Ereignis <b>onLoad <\/b>der Ribbon-Anpassung ausgel\u00f6st wird, sieht so aus:<\/p>\n<pre><span style=\"color: blue;\">Sub <\/span>onLoad_Formularribbon(ribbon<span style=\"color: blue;\"> As <\/span>IRibbonUI)\n     <span style=\"color: blue;\">Set<\/span> objRibbon_Formularribbon = ribbon\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Sie speichert lediglich den mit dem Parameter <b>ribbon <\/b>gelieferten Verweis auf die Ribbon-Anpassung in der Variablen <b>objRibbon_Formularribbon<\/b>.<\/p>\n<p>Nun m\u00fcssen wir noch daf\u00fcr sorgen, dass unser gew\u00fcnschtes <b>tab<\/b>-Element beim \u00d6ffnen des Formulars aktiviert wird.<\/p>\n<h2 data-tadv-p=\"keep\">Access Ribbon beim \u00d6ffnen des Formulars anzeigen<\/h2>\n<p>In einem ersten Versuch w\u00fcrden wir dazu die folgende Prozedur nutzen, die durch das Ereignis <b>Beim Laden <\/b>des Formulars ausgel\u00f6st wird und mit der Methode <b>ActivateTab <\/b>das <b>tab<\/b>-Element namens <b>tabForm <\/b>aktivieren soll:<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>Form_Load()\n     objRibbon_Formularribbon.ActivateTab \"tabForm\"\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Dies gelingt allerdings nicht: Anscheinend ist das <b>tab<\/b>-Element zu diesem Zeitpunkt noch gar nicht geladen, also liefert der Zugriff auf die Variable <b>objRibbon_Formularribbon <\/b>eine Fehlermeldung. Also probieren wir es mit ein wenig Verz\u00f6gerung. Dazu stellen Sie die Eigenschaft <b>Zeitgeberintervall <\/b>des Formulars auf den Wert <b>100 <\/b>ein. Dies l\u00f6st im Abstand von 100 Millisekunden die f\u00fcr die Ereigniseigenschaft <b>Bei Zeitgeber <\/b>hinterlegte Ereignisprozedur aus. Damit dies nur einmal geschieht, stellen wir in dieser Prozedur gleich das Zeitgeberintervall auf den Wert <b>0 <\/b>ein &#8211; neben dem Aktivieren des <b>tab<\/b>-Elements nat\u00fcrlich:<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>Form_Timer()\n     objRibbon_Formularribbon.ActivateTab \"tabForm\"\n     Me.TimerInterval = 0\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Auf diese Weise erhalten Sie zuverl\u00e4ssig direkt mit dem \u00f6ffnen des Formulars auch Zugriff auf die gew\u00fcnschten Ribbon-Befehle.<\/p>\n<h2>Verhindern, dass eingebaute kontextabh\u00e4ngige Ribbon-Tabs erscheinen<\/h2>\n<p>Wenn Sie nicht m\u00f6chten, dass beispielsweise beim Anzeigen eines Formulars in der Datenblattansicht auch die Befehle zum Bearbeiten des Datenblatts erscheinen (s. Bild 5), k\u00f6nnen Sie diese ebenfalls deaktivieren.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1024_005.png\" alt=\"Eingebaute kontextabh\u00e4ngige Ribbon-Tabs\" width=\"700\" height=\"183,4888\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 5: Eingebaute kontextabh\u00e4ngige Ribbon-Tabs<\/span><\/b><\/p>\n<p>Dazu greifen Sie nicht wie \u00fcblich \u00fcber die Struktur <b>customUI|ribbon|tabs|tab <\/b>auf das <b>tab<\/b>-Element zu und stellen seine Eigenschaft <b>visible <\/b>auf <b>false <\/b>ein, sondern \u00fcber <b>customUI|ribbon|contextualTabs|tabSet<\/b>.<\/p>\n<p>Folgendes w\u00fcrde beispielsweise daf\u00fcr sorgen, dass das in der Abbildung darstellte <b>tab<\/b>-Element beim Aktivieren eines Formulars in der Datenblattansicht ausgeblendet wird:<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\n&lt;customUI xmlns=\"...\"&gt;\n   &lt;ribbon&gt;\n     &lt;contextualTabs&gt;\n       &lt;tab<span style=\"color: blue;\">Set<\/span> idMso=\"TabSetFormDatasheet\" visible=\"false\"\/&gt;\n     &lt;\/contextualTabs&gt;\n   &lt;\/ribbon&gt;\n&lt;\/customUI&gt;<\/pre>\n<p>Damit Sie, wenn Sie einmal ein kontextabh\u00e4ngiges Element ausblenden m\u00f6chten, nicht lange suchen m\u00fcssen, finden Sie hier eine Liste der m\u00f6glichen Elemente:<\/p>\n<ul>\n<li><b>TabSetFormToolsLayout<\/b>: <b>Formularlayouttools <\/b>(f\u00fcr Layout-Ansicht von Formularen)<\/li>\n<li><b>TabSetFormTools<\/b>: <b>Formularentwurfstools <\/b>(f\u00fcr Entwurfsansicht von Formularen)<\/li>\n<li><b>TabSetReportToolsLayout<\/b>: <b>Berichtslayouttools<\/b><\/li>\n<li><b>TabSetReportTools<\/b>: <b>Berichtsentwurfstools<\/b><\/li>\n<li><b>TabSetRelationshipTools<\/b>: <b>Beziehungstools|Entwurf <\/b>f\u00fcr das Beziehungen-Fenster<\/li>\n<li><b>TabSetQueryTools<\/b>: <b>Abfragetools|Entwurf<\/b><\/li>\n<li><b>TabSetMacroTools<\/b>: <b>Makrotools|Entwurf<\/b><\/li>\n<li><b>TabSetPivotTableAccess<\/b>: ab Access 2013 nicht mehr unterst\u00fctzt<\/li>\n<li><b>TabSetPivotChartAccess<\/b>: ab Access 2013 nicht mehr unterst\u00fctzt<\/li>\n<li><b>TabSetTableToolsDatasheet<\/b>: <b>Tabellentools|Felder\/Entwurf<\/b><\/li>\n<li><b>TabSetTableToolsDesign<\/b>: Tabellentools|Entwurf<\/li>\n<li><b>TabSetFormDatasheet<\/b>: <b>Formulartools|Datenblatt<\/b><\/li>\n<li><b>TabSetAdpFunctionAndViewTools<\/b>: f\u00fcr Access Data Projects, werden in aktuellen Versionen nicht mehr unterst\u00fctzt<\/li>\n<li><b>TabSetAdpStoredProcedure<\/b>: f\u00fcr Access Data Projects, diese werden in aktuellen Versionen allerdings nicht mehr unterst\u00fctzt<\/li>\n<li><b>TabSetAdpSqlStatement<\/b>: f\u00fcr Access Data Projects, werden in aktuellen Versionen nicht mehr unterst\u00fctzt<\/li>\n<li><b>TabSetAdpDiagram<\/b>: f\u00fcr Access Data Projects, werden in aktuellen Versionen nicht mehr unterst\u00fctzt<\/li>\n<li><b>TabSetFormReportExtensibility<\/b>: Spezialfall f\u00fcr benutzerdefinierte kontextabh\u00e4ngige Ribbon-Tabs, die mit Formularen oder Berichten eingeblendet werden k\u00f6nnen.<\/li>\n<\/ul>\n<h2>Kontextabh\u00e4ngige tab-Elemente f\u00fcr Unterformulare<\/h2>\n<p>Sollten Sie eine Konstellation aus Haupt- und Unterformular nutzen, wobei beispielsweise das Unterformular Daten in der Datenblattansicht anzeigt, m\u00f6chten Sie vielleicht verhindern, dass immer beim Aktivieren der Datenblattansicht der Ribbonbereich <b>Formulartools|Datenblatt <\/b>eingeblendet wird.<\/p>\n<p>Das haben wir doch weiter oben besprochen, denken Sie nun vielleicht. Stimmt: Allerdings haben wir dort das Ribbon mit dem Namen <b>KontextTabsDeaktivieren <\/b>f\u00fcr die Eigenschaft <b>Name des Men\u00fcbands <\/b>des Hauptformulars ausgew\u00e4hlt.<\/p>\n<p>Wenn der Benutzer dann allerdings den Fokus auf das Unterformular verschiebt, gelten die Ribbon-Definitionen f\u00fcr das Hauptformular nicht mehr, sondern die des Unterformulars. Und dort haben wir zu diesem Zeitpunkt ja noch gar keine Einstellung der Eigenschaft <b>Name des Men\u00fcbands <\/b>vorgenommen.<\/p>\n<p>Dies holen wir wie in Bild 6 nach: Markieren Sie das Unterformular und w\u00e4hlen Sie f\u00fcr <b>Name des Men\u00fcbands <\/b>den Wert <b>KontextTabsDeaktivieren <\/b>aus. Nun k\u00f6nnen Sie in die Formularansicht wechseln und den Fokus auf das Unterformular verschieben &#8211; die Anzeige des Ribbon-Bereichs <b>Formulartools|Datenblatt <\/b>bleibt aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1024_006.png\" alt=\"Ribbon f\u00fcr das Unterformular festlegen\" width=\"650\" height=\"360,8926\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 6: Ribbon f\u00fcr das Unterformular festlegen<\/span><\/b><\/p>\n<h2>Steuerelemente abh\u00e4ngig von ge\u00f6ffneten Formularen aktivieren und deaktivieren<\/h2>\n<p>Manchmal m\u00f6chten Sie vielleicht Steuerelemente im Ribbon abh\u00e4ngig vom jeweils aktiven Formular aktivieren oder deaktivieren. Wie dies gelingt, zeigen wir im folgenden Beispiel. Dabei f\u00fcgen wir dem Ribbon drei Schaltfl\u00e4chen hinzu, die jeweils in Zusammenhang mit jeweils einem ge\u00f6ffneten Formular aktiviert werden sollen &#8211; und deaktiviert, wenn das Formular gerade geschlossen ist oder nicht den Fokus besitzt.<\/p>\n<p>Dies soll im Endergebnis etwa wie in Bild 7 aussehen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1024_007.png\" alt=\"Ribbon-Schaltfl\u00e4chen abh\u00e4ngig vom aktiven Formular aktivieren oder deaktivieren\" width=\"650\" height=\"381,8646\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 7: Ribbon-Schaltfl\u00e4chen abh\u00e4ngig vom aktiven Formular aktivieren oder deaktivieren<\/span><\/b><\/p>\n<p>Um dies zu realisieren, erstellen wir f\u00fcr das Beispiel drei Formulare namens <b>frmFormular1<\/b>, <b>frmFormular2 <\/b>und <b>frmFormular3<\/b>.<\/p>\n<p>F\u00fcgen Sie dann die Access Ribbon-Definition aus Listing 3 zur Tabelle <b>tblUSysRibbons <\/b>hinzu und geben Sie als Name <b>FormularabhaengigeSchaltflaechen <\/b>an. Die Ribbon-Definition enth\u00e4lt drei <b>button<\/b>-Elemente, deren Besonderheit darin liegt, dass sie den Wert <b>getEnabled <\/b>f\u00fcr das Attribut <b>getEnabled <\/b>enthalten. Dabei handelt es sich wiederum um ein Callback-Attribut, was bedeutet, dass wir genau wie weiter oben beim Attribut <b>onAction <\/b>eine entsprechende Callback-Funktion in einem Standardmodul anlegen m\u00fcssen.<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\n&lt;customUI xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\" onLoad=\"OnLoad_FormularabhaengigeSchaltflaechen\" \n     loadImage=\"loadImage\"&gt;\n   &lt;ribbon&gt;\n     &lt;tabs&gt;\n       &lt;tab id=\"tab33063\" label=\"Formularabh\u00e4ngige Schaltfl\u00e4chen\"&gt;\n         &lt;group id=\"grp33064\" label=\"Formularabh\u00e4ngige Schaltfl\u00e4chen\"&gt;\n           &lt;button image=\"keyboard_key_1\" getEnabled=\"getEnabled\" label=\"Formular 1\" id=\"btnFrm1\" onAction=\"onAction\"\n             size=\"large\"\/&gt;\n           &lt;button image=\"keyboard_key_2\" getEnabled=\"getEnabled\" label=\"Formular 2\" id=\"btnFrm2\" onAction=\"onAction\" \n             size=\"large\"\/&gt;\n           &lt;button image=\"keyboard_key_3\" getEnabled=\"getEnabled\" label=\"Formular 3\" id=\"btnFrm3\" onAction=\"onAction\" \n             size=\"large\"\/&gt;\n         &lt;\/group&gt;\n       &lt;\/tab&gt;\n     &lt;\/tabs&gt;\n   &lt;\/ribbon&gt;\n&lt;\/customUI&gt;<\/pre>\n<p><b><span style=\"color: darkgrey;\">Listing 3: Ribbon-Definition f\u00fcr ein Ribbon, dessen Schaltfl\u00e4chen je nach aktivem Formular aktiviert werden<\/span><\/b><\/p>\n<h2 data-tadv-p=\"keep\">getEnabled vs. onAction<\/h2>\n<p>Im Gegensatz zu <b>onAction <\/b>wird <b>getEnabled <\/b>immer dann ausgel\u00f6st, wenn das entsprechende Element des Access Ribbons neu gezeichnet wird &#8211; oder wenn der Aufruf mit der Methode <b>Invalidate <\/b>oder <b>InvalidateControl <\/b>einer entsprechenden Objektvariablen des Typs <b>RibbonUI <\/b>ausgel\u00f6st wird.<\/p>\n<p>Dabei l\u00f6st <b>Invalidate <\/b>alle <b>get&#8230;<\/b>-Callback-Funktionen aus und <b>InvalidateControl <\/b>erwartet den Namen des Steuerelements, das neu konfiguriert werden soll.<\/p>\n<p>Diese speichern wir in diesem Fall in der wie folgt deklarierten Variablen:<\/p>\n<pre><span style=\"color: blue;\">Public <\/span>objRibbon_FormularabhaengigeSchaltflaechen<span style=\"color: blue;\"> As <\/span>IRibbonUI<\/pre>\n<p>Damit diese beim Erstellen der Ribbon-Erweiterung gef\u00fcllt wird, hinterlegen wir in der Ribbon-Definition wiederum das Attribut <b>onLoad <\/b>mit dem Wert <b>onLoad_FormularabhaengigeSchaltflaechen <\/b>f\u00fcr das Element <b>customUI<\/b>.<\/p>\n<p>Die dadurch ausgel\u00f6ste Callback-Funktion soll wie folgt aussehen.<\/p>\n<pre><span style=\"color: blue;\">Sub <\/span>onLoad_FormularabhaengigeSchaltflaechen( ribbon<span style=\"color: blue;\"> As <\/span>IRibbonUI)\n     <span style=\"color: blue;\">Set<\/span> objRibbon_FormularabhaengigeSchaltflaechen =  ribbon\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Die beim Aktualisieren des Ribbons (und somit auch beim ersten Anzeigen) ausgel\u00f6ste Callback-Funktion <b>getEnabled <\/b>definieren wir im Modul <b>mdlRibbons <\/b>wie in Listing 4.<\/p>\n<pre><span style=\"color: blue;\">Sub <\/span>getEnabled(control<span style=\"color: blue;\"> As <\/span>IRibbonControl, ByRef enabled)\n     Select Case control.ID\n         <span style=\"color: blue;\">Case <\/span>\"btnFrm1\"\n             enabled = (AktivesFormular = \"frmFormular1\")\n         <span style=\"color: blue;\">Case <\/span>\"btnFrm2\"\n             enabled = (AktivesFormular = \"frmFormular2\")\n         <span style=\"color: blue;\">Case <\/span>\"btnFrm3\"\n             enabled = (AktivesFormular = \"frmFormular3\")\n         <span style=\"color: blue;\">Case Else<\/span>\n             <span style=\"color: blue;\">Debug.Print<\/span> \"getEnabled ist f\u00fcr ''\" &amp; control.ID &amp; \"'' nicht implementiert.\"\n     <span style=\"color: blue;\">End Select<\/span>\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color: darkgrey;\">Listing 4: Diese Callback-Funktion aktualisiert die enabled-Eigenschaft der button-Elemente.<\/span><\/b><\/p>\n<h2 data-tadv-p=\"keep\">Steuerelementname ermitteln<\/h2>\n<p>Die Funktion pr\u00fcft zun\u00e4chst, wie das aufrufende Steuerelement hei\u00dft, in diesem Fall also <b>btnFrm1<\/b>, <b>btnFrm2 <\/b>oder <b>btnFrm3<\/b>. Davon abh\u00e4ngig steuert es einen der Zweige der <b>Select Case<\/b>-Bedingung an, die im \u00fcbrigen eine Meldung wie <b>getEnabled ist f\u00fcr &#8220;&#8220; nicht implementiert. <\/b>ausgibt, wenn das mit <b>control <\/b>gelieferte Steuerelement in keinem der vorherigen Zweige behandelt wurde.<\/p>\n<p>Im Falle eines der ersten drei Zweige der <b>Select Case<\/b>-Bedingung jedoch stellt die Funktion den R\u00fcckgabeparameter <b>enabled <\/b>auf einen <b>Boolean<\/b>-Wert ein, der das Ergebnis des Vergleichs des Namens des aktiven Formulars und eines der Werte <b>frmFormular1<\/b>, <b>frmFormular2 <\/b>oder <b>frmFormular3 <\/b>liefert.<\/p>\n<p>Dabei ermittelt die Funktion <b>AktivesFormular<\/b> den Namen des aktuell im Fokus befindlichen Formulars:<\/p>\n<pre><span style=\"color: blue;\">Public Function <\/span>AktivesFormular()<span style=\"color: blue;\"> As String<\/span>\n     <span style=\"color: blue;\">Dim <\/span>strTemp<span style=\"color: blue;\"> As String<\/span>\n     On Error Resume <span style=\"color: blue;\">Next<\/span>\n     strTemp = Screen.ActiveForm.Name\n     <span style=\"color: blue;\">On Error GoTo<\/span> 0\n     AktivesFormular = strTemp\n<span style=\"color: blue;\">End Function<\/span><\/pre>\n<p><b>Screen.ActiveForm <\/b>liefert dabei einen Verweis auf das entsprechende <b>Form<\/b>-Objekt, aber nur, wenn \u00fcberhaupt ein Formular den Fokus besitzt. Anderenfalls l\u00f6st der Zugriff auf <b>Screen.ActiveForm <\/b>einen Fehler aus, weshalb die entsprechende Anweisung auch bei deaktivierter Fehlerbehandlung ausgef\u00fchrt wird.<\/p>\n<p>Nun m\u00fcssen wir nur noch daf\u00fcr sorgen, dass beim Fokus-erhalt eines der drei Formulare die <b>getEnabled<\/b>-Funktion ausgel\u00f6st wird &#8211; und ebenso nat\u00fcrlich auch beim Fokusverlust, denn dann soll die entsprechende Schaltfl\u00e4che ja auch wieder deaktiviert werden.<\/p>\n<p>Dies erledigen wir dabei mit der Methode <b>Invalidate <\/b>des Objekts <b>objRibbonFormularabhaengigeSchaltflaechen<\/b>, und zwar in den Prozeduren, die durch die Ereignisse <b>Bei Fokuserhalt <\/b>und <b>Bei Fokusverlust <\/b>der drei Formulare ausgel\u00f6st werden (s. Bild 8). Die Prozeduren sehen in allen drei Formularen gleich aus:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1024_008.png\" alt=\"Ereignisprozeduren beim Fokuserhalt und Fokusverlust anlegen\" width=\"500\" height=\"333,0171\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 8: Ereignisprozeduren beim Fokuserhalt und Fokusverlust anlegen<\/span><\/b><\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>Form_GotFocus()\n     objRibbon_FormularabhaengigeSchaltflaechen.Invalidate\n<span style=\"color: blue;\">End Sub<\/span>\n<span style=\"color: blue;\">Private Sub <\/span>Form_LostFocus()\n     objRibbon_FormularabhaengigeSchaltflaechen.Invalidate\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<h2>Auf Tabwechsel im Access Ribbon reagieren<\/h2>\n<p>Microsoft hat bei der Entwicklung des Access Ribbons einige wichtige Ereignisse vergessen &#8211; so zum Beispiel eines, das beim Anklicken eines bestimmten Ribbon-Tabs ausgel\u00f6st wird. Mit ein wenig Bastelarbeit k\u00f6nnen Sie ein solches Ereignis jedoch nachbauen.<\/p>\n<h2>Aus getLabel mach clickTab<\/h2>\n<p>Der Hintergrund dieser L\u00f6sung ist, dass jedes Tab wohl mindestens ein <b>group<\/b>-Element enthalten wird. Und ein <b>group<\/b>-Element kann, wenn es sichtbar wird, eine <b>getEnabled<\/b>-Callback-Funktion aufrufen, um sein Label zu erfragen.<\/p>\n<p>Dies nutzen wir aus, indem wir in dieser Callbackfunktion gleichzeitig eine Verbindung zum \u00fcbergeordneten <b>tab<\/b>-Element herstellen und den gew\u00fcnschten Code ausf\u00fchren.<\/p>\n<p>Im Beispiel soll ein Klick auf <b>tab1 <\/b>im Formular <b>frmTabs <\/b>den Namen des aktuellen Tabs ausgeben, ein Klick auf <b>tab2 <\/b>ebenfalls.<\/p>\n<p>Die Access Ribbon-Definition sieht so aus:<\/p>\n<pre>&lt;xml version=\"1.0\"&gt;\n&lt;customUI xmlns=\"http:\/\/schemas.microsoft.com\/office\/2006\/01\/customui\" onLoad=\"OnLoad_NeuesRibbon\"&gt;\n   &lt;ribbon startFromScratch=\"true\"&gt;\n     &lt;tabs&gt;\n       &lt;tab id=\"tab1\" label=\"tab1\"&gt;\n         &lt;group id=\"grp1\" tag=\"group 1\" getLabel=\"getLabel\"\/&gt;\n       &lt;\/tab&gt;\n       &lt;tab id=\"tab2\" label=\"tab2\"&gt;\n         &lt;group id=\"grp2\" tag=\"group 2\" getLabel=\"getLabel\"\/&gt;\n       &lt;\/tab&gt;\n     &lt;\/tabs&gt;\n   &lt;\/ribbon&gt;\n&lt;\/customUI&gt;<\/pre>\n<p>Die Access Ribbon-Definition ruft beim Laden eine Callback-Funktion auf, die einen Verweis auf das Ribbon-Objekt in einer Variablen speichert:<\/p>\n<pre><span style=\"color: blue;\">Dim <\/span>objRibbon_NeuesRibbon<span style=\"color: blue;\"> As <\/span>IRibbonUI\n<span style=\"color: blue;\">Sub <\/span>onLoad_NeuesRibbon(ribbon<span style=\"color: blue;\"> As <\/span>IRibbonUI)\n     <span style=\"color: blue;\">Set<\/span> objRibbon_NeuesRibbon = ribbon\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Dies ist notwendig, damit die <b>getLabel<\/b>-Funktion das aktuell nicht sichtbare <b>group<\/b>-Element beim Wechseln des Tabs &#8222;invalidieren&#8220; kann und dieses beim n\u00e4chsten Erscheinen ebenfalls wieder die <b>getEnabled<\/b>-Funktion aufruft.<\/p>\n<h2 data-tadv-p=\"keep\">getEnabled nach dem Aktualisieren<\/h2>\n<p>Diese Funktion sieht wie folgt aus und erledigt in Abh\u00e4ngigkeit vom aufrufenden <b>group<\/b>-Element nur zwei Dinge &#8211; die Anzeige des Namens des \u00fcbergeordneten <b>tab<\/b>-Elements im Formulartextfeld und das &#8222;Invalidate&#8220; des <b>group<\/b>-Element im jeweils anderen <b>tab<\/b>-Element:<\/p>\n<pre><span style=\"color: blue;\">Sub <\/span>getLabel(control<span style=\"color: blue;\"> As <\/span>IRibbonControl, ByRef label)\n     Select Case control.Id\n         <span style=\"color: blue;\">Case <\/span>\"grp1\"\n             DoCmd.OpenForm \"frmTabs\"\n             Forms!frmTabs!txtTab = \"Tab 1\"\n             objRibbon_NeuesRibbon.InvalidateControl \"grp2\"\n         <span style=\"color: blue;\">Case <\/span>\"grp2\"\n             DoCmd.OpenForm \"frmTabs\"\n             Forms!frmTabs!txtTab = \"Tab 2\"\n             objRibbon_NeuesRibbon.InvalidateControl \"grp1\"\n     <span style=\"color: blue;\">End Select<\/span>\n     label = control.Tag\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Wenn mehr als ein <b>tab<\/b>-Element im Spiel ist, braucht man nat\u00fcrlich entsprechend mehr <b>Case<\/b>-Zweige und es m\u00fcssen in jedem <b>Case<\/b>-Zweig alle gerade nicht sichtbaren <b>group<\/b>-Elemente &#8222;invalidiert&#8220; werden.<\/p>\n<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>TippsUndTricksRibbon.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/FEEFFB5B-5B76-463A-872F-910C4CEEC52C\/aiu_1024.zip\">Download<\/a><\/p>\n<h2>Weitere interessante Artikel zu diesem Thema<\/h2>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/526'>Accessweites Ribbon mit VB6<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/657'>Dynamische Ribbons<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/676'>Auswahlfelder im Ribbon<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/877'>Ribbon-Guide, Teil I: Rund um das tab-Element <\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/894'>Ribbons und Formulare<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/904'>Globale Ribbon-Anpassung<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/980'>Dynamische Formular-Ribbons<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1068'>Eigene Ribbons ohne Code<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1069'>Ribbonklassen<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1081'>Ribbon f&uuml;r das Ticketsystem<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1091'>Kundenverwaltung mit Ribbon, Teil I<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1093'>COM-Add-In-Ribbons mit dem XML-Designer<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1104'>Kundenverwaltung mit Ribbon, Teil II<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1122'>Ribbon-Elemente aktivieren und deaktivieren<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1199'>Button vom Formular ins Ribbon<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1224'>Objekte im Ribbon verf&uuml;gbar machen<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1244'>TreeView mit Ribbon-Eintr&auml;gen<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1254'>Ribbon f&uuml;r Rich-Text-Felder<\/a><\/p>\n<p><a href='https:\/\/www.access-im-unternehmen.de\/1283'>Ribbon-Anzeige im Griff<\/a><\/p>\n<p><!--LinksEnde--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Ribbon und seine Programmierung enth&auml;lt immer noch viele Geheimnisse f&uuml;r uns Access-Entwickler. Dieser Beitrag zeigt einige Techniken, mit denen Sie oft angefragte Konstellationen erhalten &#8211; beispielsweise das Ein- und Ausblenden zus&auml;tzlicher Ribbon-Elemente mit der Anzeige bestimmter Formulare oder auch das Aktivieren und Deaktivieren von Steuerelementen oder kompletter Ribbon-Bereiche in Abh&auml;ngigkeit vom Vorhandensein bestimmter Elemente der Benutzeroberfl&auml;che.<\/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":[66012016,662016,44000028],"tags":[],"class_list":["post-55001024","post","type-post","status-publish","format-standard","hentry","category-66012016","category-662016","category-Ergonomie_und_Benutzeroberflaeche"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Das Access Ribbon bietet viele M\u00f6glichkeiten zur Men\u00fcgestaltung<\/title>\n<meta name=\"description\" content=\"Das Access Ribbon bietet mit Tabs, Gruppen und vielen verschiedenen Steuerelementen Werkzeuge f\u00fcr Men\u00fcs. Lesen Sie, wie Sie diese einsetzen!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rund um das Access Ribbon\" \/>\n<meta property=\"og:description\" content=\"Das Access Ribbon bietet mit Tabs, Gruppen und vielen verschiedenen Steuerelementen Werkzeuge f\u00fcr Men\u00fcs. Lesen Sie, wie Sie diese einsetzen!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-22T16:34:21+00:00\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rund_um_das_Access_Ribbon\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rund_um_das_Access_Ribbon\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Rund um das Access Ribbon\",\"datePublished\":\"2021-03-22T16:34:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rund_um_das_Access_Ribbon\\\/\"},\"wordCount\":2660,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"articleSection\":[\"1\\\/2016\",\"2016\",\"Ergonomie und Benutzeroberfl\u00e4che\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Rund_um_das_Access_Ribbon\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rund_um_das_Access_Ribbon\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rund_um_das_Access_Ribbon\\\/\",\"name\":\"Das Access Ribbon bietet viele M\u00f6glichkeiten zur Men\u00fcgestaltung\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"datePublished\":\"2021-03-22T16:34:21+00:00\",\"description\":\"Das Access Ribbon bietet mit Tabs, Gruppen und vielen verschiedenen Steuerelementen Werkzeuge f\u00fcr Men\u00fcs. Lesen Sie, wie Sie diese einsetzen!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rund_um_das_Access_Ribbon\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Rund_um_das_Access_Ribbon\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rund_um_das_Access_Ribbon\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rund um das Access Ribbon\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Das Access Ribbon bietet viele M\u00f6glichkeiten zur Men\u00fcgestaltung","description":"Das Access Ribbon bietet mit Tabs, Gruppen und vielen verschiedenen Steuerelementen Werkzeuge f\u00fcr Men\u00fcs. Lesen Sie, wie Sie diese einsetzen!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/","og_locale":"de_DE","og_type":"article","og_title":"Rund um das Access Ribbon","og_description":"Das Access Ribbon bietet mit Tabs, Gruppen und vielen verschiedenen Steuerelementen Werkzeuge f\u00fcr Men\u00fcs. Lesen Sie, wie Sie diese einsetzen!","og_url":"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-03-22T16:34:21+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Rund um das Access Ribbon","datePublished":"2021-03-22T16:34:21+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/"},"wordCount":2660,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"articleSection":["1\/2016","2016","Ergonomie und Benutzeroberfl\u00e4che"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/","url":"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/","name":"Das Access Ribbon bietet viele M\u00f6glichkeiten zur Men\u00fcgestaltung","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"datePublished":"2021-03-22T16:34:21+00:00","description":"Das Access Ribbon bietet mit Tabs, Gruppen und vielen verschiedenen Steuerelementen Werkzeuge f\u00fcr Men\u00fcs. Lesen Sie, wie Sie diese einsetzen!","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Rund_um_das_Access_Ribbon\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Rund um das Access Ribbon"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001024"}],"version-history":[{"count":8,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001024\/revisions"}],"predecessor-version":[{"id":88072464,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001024\/revisions\/88072464"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}