{"id":55001507,"date":"2024-08-01T00:00:00","date_gmt":"2024-08-01T09:53:56","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1507"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Letztes_geoeffnetes_RibbonTab_merken","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/","title":{"rendered":"Letztes ge&ouml;ffnetes Ribbon-Tab merken"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/b6d778e682d749e38b476f34782e0808\" width=\"1\" height=\"1\" alt=\"\"><b>Wer das Ribbon ausgiebig nutzt, hat schnell einige Tabs zusammen, die wiederum mehrere Gruppen mit den jeweiligen Steuerelementen enthalten. Diese Tabs sind in der Regel so ausgelegt, dass das zuerst angezeigte Tab aktiviert wird, wenn der Benutzer die Anwendung startet. Wenn der Benutzer aber regelm&auml;&szlig;ig eher mit den Aufgaben einsteigt, die sich in einem anderen Tab befinden, muss er jedes Mal erst noch zu diesem Tab wechseln. Um dies zu vereinfachen, stellen wir in diesem Beitrag eine L&ouml;sung vor, mit der sich die Anwendung das zuletzt verwendete Tab-Element merken kann und dieses beim n&auml;chsten Start wiederherstellt. <\/b><\/p>\n<p>Umfangreiche Anwendungen enthalten manchmal ebenso reichhaltige Ribbon-Definitionen mit vielen Tab, Groups und Steuerelementen. Benutzer w&auml;hlen ein Tab aus, um Funktionen mit den darin enthaltenen Steuerelementen aufzurufen.<\/p>\n<p>Gegebenenfalls ist es f&uuml;r den Benutzer hilfreich, wenn er &ouml;fter Befehle eines speziellen <b>tab<\/b>-Elements nutzt, dass dieses Tab beim Schlie&szlig;en und erneuten Starten einer Anwendung direkt wieder angezeigt wird.<\/p>\n<p>Die damit verbundenen Techniken wollen wir in diesem Beitrag einmal vorstellen. Dazu haben wir eine kleine Beispielanpassung des Ribbons vorbereitet, die zun&auml;chst einmal nur drei Tabs mit den jeweiligen Gruppen und je einem Steuerelement anzeigt.<\/p>\n<p>Dieses definieren wir wie in Listing 1.<\/p>\n<pre>&lt;?xml version=\"1.0\"?&gt;\r\n&lt;customUI xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\"&gt;\r\n   &lt;ribbon&gt;\r\n     &lt;tabs&gt;\r\n       &lt;tab id=\"tab1\" label=\"Tab 1\"&gt;\r\n         &lt;group id=\"grp11\" label=\"Gruppe 1-1\"&gt;\r\n           &lt;button idMso=\"Copy\" size=\"large\"\/&gt;\r\n           &lt;button idMso=\"Cut\" size=\"large\"\/&gt;\r\n           &lt;button idMso=\"Paste\" size=\"large\"\/&gt;\r\n         &lt;\/group&gt;\r\n       &lt;\/tab&gt;\r\n       &lt;tab id=\"tab2\" label=\"Tab 2\"&gt;\r\n         &lt;group id=\"grp21\" label=\"Gruppe 2-1\"&gt;\r\n           &lt;button idMso=\"FindDialog\" size=\"large\"\/&gt;\r\n         &lt;\/group&gt;\r\n       &lt;\/tab&gt;\r\n       &lt;tab id=\"tab3\" label=\"Tab 3\"&gt;\r\n         &lt;group id=\"grp31\" label=\"Gruppe 3-1\"&gt;\r\n           &lt;button idMso=\"CreateTable\" size=\"large\"\/&gt;\r\n           &lt;button idMso=\"CreateTableInDesignView\" 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><b><span style=\"color:darkgrey;\">Listing 1: Ausgangsposition f&uuml;r das Speichern des zuletzt verwendeten Tab-Elements<\/span><\/b><\/p>\n<p>Wir sehen das <b>customUI<\/b>-Element mit dem <b>ribbon<\/b>&#8211; und dem <b>tabs<\/b>-Element, dem wiederum drei <b>tab<\/b>-Element untergeordnet sind.<\/p>\n<p>Diese enthalten jeweils eine Gruppe mit ein paar Schaltfl&auml;chen auf Basis eingebauter Steuerelemente. Damit dieses Ribbon in der Beispielanwendung wie in Bild 1 erscheint, sind folgende Schritte zu erledigen:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1507_001.png\" alt=\"Beispielribbon, dessen Tabs wir uns merken wollen\" width=\"649,559\" height=\"143,3783\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Beispielribbon, dessen Tabs wir uns merken wollen<\/span><\/b><\/p>\n<ul>\n<li>Anlegen einer Tabelle namens <b>USysRibbons <\/b>wie in Bild 2, der wir die Daten wie abgebildet hinzuf&uuml;gen.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1507_002.png\" alt=\"Tabelle USysRibbons mit unserer Ribbondefition \" width=\"649,559\" height=\"532,657\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Tabelle USysRibbons mit unserer Ribbondefition <\/span><\/b><\/p>\n<li>Komprimieren und Reparieren der Datenbank (schnellste Version, um eine Datenbankdatei zu schlie&szlig;en und wieder zu &ouml;ffnen)<\/li>\n<li>&Ouml;ffnen der Access-Optionen und dort unter <b>Aktuelle Datenbank <\/b>im Bereich <b>Men&uuml;band- und Symbolleistenoptionen <\/b>die Option <b>Name des Men&uuml;bands <\/b>auf <b>Main <\/b>einstellen (siehe Bild 3).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1507_003.png\" alt=\"Einstellen der Ribbondefinition als Anwendungsribbon\" width=\"649,559\" height=\"354,1143\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Einstellen der Ribbondefinition als Anwendungsribbon<\/span><\/b><\/p>\n<li>Erneutes Komprimieren und Reparieren.<\/li>\n<\/ul>\n<p>Danach sollte das Ribbon wie in der Abbildung erscheinen. Wenn Sie nur die benutzerdefinierten Ribbon-Eintr&auml;ge hinzuf&uuml;gen wollen, &auml;ndern Sie die Zeile mit dem <b>Ribbon<\/b>-Element wie folgt:<\/p>\n<pre>&lt;ribbon startFromScratch=\"true\"&gt;<\/pre>\n<p>Danach noch einmal Komprimieren und Reparieren und das Ribbon erscheint wie in Bild 4.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1507_004.png\" alt=\"Ribbon ohne eingebaute Elemente\" width=\"249,5589\" height=\"169,8126\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Ribbon ohne eingebaute Elemente<\/span><\/b><\/p>\n<h2>Letztes Ribbontab speichern<\/h2>\n<p>Wie aber bekommen wir es nun hin, dass sich die Anwendung das beim Schlie&szlig;en ge&ouml;ffnete Ribbontab merkt? Dazu sind grob die folgenden Schritte n&ouml;tig:<\/p>\n<ul>\n<li>Beim Schlie&szlig;en der Anwendung das aktuell ge&ouml;ffnete t<b>ab<\/b>-Element ermitteln.<\/li>\n<li>Eine Information &uuml;ber dieses <b>tab<\/b>-Element an einer beliebigen Stelle speichern.<\/li>\n<li>Beim &Ouml;ffnen der Anwendung das gespeicherte Tab wiederherstellen.<\/li>\n<\/ul>\n<p>Den letzten Punkt k&ouml;nnen wir abdecken, wenn wir wissen, dass es eine <b>ActivateTab<\/b>-Methode gibt, der wir den Namen des zu aktivierenden <b>tab<\/b>-Elements &uuml;bergeben.<\/p>\n<p>Der zweite Punkt ist reine Flei&szlig;arbeit. Wir k&ouml;nnen uns &uuml;berlegen, ob diese Information in einer Tabelle der Datenbank, einer Textdatei, der Registry oder auch einer Datenbankeigenschaft gespeichert wird. Da die Information je Benutzer gespeichert werden soll, ist es sinnvoll, diese in der Registry im Bereich f&uuml;r das aktuelle Benutzerkonto zu hinterlegen.<\/p>\n<p>Der erste Punkt ist etwas schwieriger. Zun&auml;chst einmal gibt es keine M&ouml;glichkeit, zu irgendeinem Zeitpunkt auszulesen, welches <b>tab<\/b>-Element gerade markiert ist. Es gibt keine Auflistung der Tabs im Objektmodell von Access oder Office, und es gibt auch keine Eigenschaft, die das aktuell aktivierte <b>tab<\/b>-Element referenziert.<\/p>\n<p>Wir m&uuml;ssen also all unser Ribbon-Know-how nutzen, um diese Anforderung zu l&ouml;sen.<\/p>\n<p>Wir wissen: Es gibt keine Methode, mit der explizit wir auf das Wechseln des <b>tab<\/b>-Elements reagieren k&ouml;nnen. Aber es gibt einige Methoden, die beim Anzeigen von Steuerelementen wie beispielsweise bei <b>button<\/b>-Elementen ausgel&ouml;st werden.<\/p>\n<p>Das <b>button<\/b>-Element liefert beispielsweise einige <b>get&#8230;<\/b>-Callback-Funktionen, die immer ausgel&ouml;st werden, wenn ein Element erstmals sichtbar gemacht wird &#8211; also beispielsweise, wenn sich das <b>button<\/b>-Element auf dem ersten Tab befindet und dieses beim Starten der Anwendung angezeigt wird. Wenn sich ein <b>button<\/b>-Element auf einem anderen, zun&auml;chst nicht aktivierten <b>tab<\/b>-Element befindet, werden seine <b>get&#8230;<\/b>-Callbacks erst einmal nicht aufgerufen. Dies geschieht erst, wenn das zweite Tab dann eingeblendet wird.<\/p>\n<p>Wir k&ouml;nnen also auf jedem Tab ein <b>button<\/b>-Element unterbringen, das jeweils beim Aktivieren des <b>tab<\/b>-Elements die <b>get&#8230;<\/b>-Callbackfunktion aufruft.<\/p>\n<p>Das <b>button<\/b>-Element muss noch nicht einmal sichtbar sein. Genau genommen soll es das auch gar nicht &#8211; wir wollen ein <b>button<\/b>-Element nur f&uuml;r diesen einen Zweck hinzuf&uuml;gen.<\/p>\n<p>Und wenn es ohnehin nicht sichtbar sein soll, k&ouml;nnen wir auch gleich sein <b>getVisible<\/b>-Attribut nutzen und damit die <b>getVisible<\/b>-Callbackfunktion aufrufen, wenn das <b>tab<\/b>-Element aktiviert wird. In dieser Funktion k&ouml;nnen wir dann einfach speichern, welches <b>tab<\/b>-Element gerade aktiviert wurde.<\/p>\n<p>Wir f&uuml;gen also jedem <b>tab<\/b>-Element in einem <b>group<\/b>-Element ein neues <b>button<\/b>-Element hinzu, welches das Attribut <b>getVisible <\/b>enth&auml;lt und beispielsweise wie folgt aussieht:<\/p>\n<pre>&lt;tab id=\"tab1\" label=\"Tab 1\"&gt;\r\n   &lt;group id=\"grp11\" label=\"Gruppe 1-1\"&gt;\r\n     &lt;button label=\"Button 1-1-1\"         getVisible=\"getVisible\" id=\"btn111\" tag=\"tab1\"\/&gt;\r\n     ...\r\n   &lt;\/group&gt;\r\n&lt;\/tab&gt;<\/pre>\n<p>Wir sehen hier allerdings nicht nur das Attribut <b>getVisible<\/b>, sondern auch noch das Attribut <b>tag<\/b>. Mit diesem legen wir fest, in welchem <b>tab<\/b>-Element sich das <b>button<\/b>-Element befindet &#8211; in diesem Fall <b>tab1<\/b>.<\/p>\n<p>Die Callbackfunktion, die durch das Ausl&ouml;sen von <b>getVisible <\/b>ausgef&uuml;hrt wird, sieht zun&auml;chst wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>getVisible(control<span style=\"color:blue;\"> As <\/span>IRibbonControl, ByRef visible)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"LastUsedTab gespeichert: \" & control.Tag\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese Prozedur f&uuml;gen wir einem Standardmodul hinzu, in diesem Fall namens <b>mdlRibbons<\/b>.<\/p>\n<p>Wir wollen hier zun&auml;chst nur ausgeben, welches <b>tab<\/b>-Element gerade aktiviert wurde.<\/p>\n<p>Wenn wir f&uuml;r alle drei Tabs jeweils ein solches <b>button<\/b>-Element hinterlegen, die alle drei die gleiche Callback-Funktion <b>getVisible <\/b>aufrufen, erhalten wir nach dem Starten und dem aufeinanderfolgenden Anklicken der drei Ribbon-Tabs die Ausgabe aus Bild 5 im Direktbereich des VBA-Editors.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1507_005.png\" alt=\"Ausgabe nach dem Aktivieren der drei Ribbon-Tabs\" width=\"424,5589\" height=\"120,2216\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Ausgabe nach dem Aktivieren der drei Ribbon-Tabs<\/span><\/b><\/p>\n<h2>Erneutes Ausl&ouml;sen der get&#8230;-Funktionen aktivieren<\/h2>\n<p>Allerdings gelingt dies auch nur beim jeweils ersten Aufruf. Klicken wir danach nochmal auf eines der anderen <b>tab<\/b>-Elemente, erfolgt keine weitere Ausgabe im Direktbereich. Woran liegt das? Nun: Wenn ein <b>tab<\/b>-Element mit seinen Unterelementen einmal angezeigt wurde, dann ausgeblendet wird und wieder aktiviert wird, geht Access davon aus, dass sich zwischenzeitlich nichts ge&auml;ndert hat und liefert lediglich die bereits zuvor festgelegte Ansicht. Dadurch werden auch die <b>get&#8230;<\/b>-Funktionen nicht erneut aufgerufen.<\/p>\n<p>Damit dies erneut geschieht, m&uuml;ssen wir die Ribbondefinition ung&uuml;ltig machen, was durch den Aufruf der Methode <b>Invalidate <\/b>(f&uuml;r das ganze Ribbon) oder <b>InvalidateControl <\/b>(f&uuml;r einzelne Steuerelemente) geschieht.<\/p>\n<p>Diese Methode ist allerdings eine Methode der <b>IRibbonUI<\/b>-Klasse, und daher m&uuml;ssen wir erst einmal eine Variable dieses Typs mit einem Verweis auf unsere Ribbondefinition f&uuml;llen.<\/p>\n<p>Das erledigen wir in der Ribbon-Callbackprozedur <b>OnLoad<\/b>. Dazu legen wir das entsprechende Attribut <b>onLoad <\/b>f&uuml;r das Element <b>customUI <\/b>an, das nun wie folgt aussieht:<\/p>\n<pre>&lt;customUI xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\" onLoad=\"OnLoad_Main\"&gt;<\/pre>\n<p>Au&szlig;erdem legen wir im Modul <b>mdlRibbons<\/b> eine Variable an, die wir beim Initialisieren dieser Ribbondefinition f&uuml;llen wollen:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>objRibbon_Main<span style=\"color:blue;\"> As <\/span>IRibbonUI<\/pre>\n<p>Die Funktion zum F&uuml;llen dieser Variable sieht schlie&szlig;lich wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>onLoad_Main(ribbon<span style=\"color:blue;\"> As <\/span>IRibbonUI)\r\n     <span style=\"color:blue;\">Set<\/span> objRibbon_Main = ribbon\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit haben wir eine Variable, deren Methode <b>Invalidate <\/b>oder <b>InvalidateControl <\/b>wir aufrufen k&ouml;nnen.<\/p>\n<p>Wir wollen jeweils das <b>button<\/b>-Element ung&uuml;ltig machen, damit seine <b>get&#8230;<\/b>-Callbackfunktionen beim n&auml;chsten Anzeigen dieses Steuerelements wieder aufgerufen werden. Also erweitern wir die Prozedur <b>getVisible <\/b>wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>getVisible(control<span style=\"color:blue;\"> As <\/span>IRibbonControl, ByRef visible)\r\n     objRibbon_Main.Invalidate\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"LastUsedTab gespeichert: \" & control.Tag\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wir m&uuml;ssen hier die <b>Invalidate<\/b>-Methode verwenden, welche die komplette Ribbondefinition ung&uuml;ltig macht. Wenn wir die <b>InvalidateControl<\/b>-Methode nutzen, beispielsweise f&uuml;r das jeweilige <b>button<\/b>-Element, dessen Namen wir mit der Parametereigenschaft<b> control.id <\/b>&uuml;bermittelt bekommen, funktioniert es nicht &#8211; vermutlich, weil zum Zeitpunkt des Aufrufs von <b>InvalidateControl <\/b>das betroffene Steuerelement noch angezeigt wird und sofort aktualisiert w&uuml;rde.<\/p>\n<p>Also verwenden wir Invalidate und erhalten so das Ergebnis, dass wir die Elemente <b>tab1<\/b>, <b>tab2 <\/b>und <b>tab3 <\/b>so oft aktivieren k&ouml;nnen, wie wir wollen &#8211; die entsprechende Meldung wird immer im Direktbereich ausgeben. Also funktioniert nun auch der Aufruf von <b>getVisible <\/b>immer. Normalerweise w&uuml;rde man in <b>getVisible <\/b>den Parameter <b>visible <\/b>mit dem gew&uuml;nschten Wert f&uuml;llen, um das Element entweder ein- oder auszublenden, aber wir ben&ouml;tigen das Element ja nur zum Ausf&uuml;hren dieser Callbackfunktion und weisen visible daher nicht explizit einen Wert zu.<\/p>\n<p>Dadurch wird der Standardwert <b>false<\/b> &uuml;bernommen und das Steuerelement bleibt unsichtbar.<\/p>\n<p>Doch nun haben wir immer noch nicht das zuletzt verwendete <b>tab<\/b>-Element gespeichert. Dazu erweitern wir die Prozedur <b>getVisible<\/b> nun um eine weitere Anweisung:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>getVisible(control<span style=\"color:blue;\"> As <\/span>IRibbonControl, ByRef visible)\r\n     objRibbon_Main.Invalidate\r\n     SaveAppSetting \"LastUsedTab\", control.Tag\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Funktion <b>SaveAppSetting <\/b>ist eine benutzerdefinierte Funktion, die den Inhalt von <b>control.Tag <\/b>in einem bestimmten Bereich der Registry speichert. Dieser Bereich ist ein spezieller Bereich zum Speichern von Anwendungsdaten von VBA-Anwendungen. Wir finden diesen in der Registry unter diesem Schl&uuml;ssel:<\/p>\n<pre>Computer\\HKEY_CURRENT_USER\\Software\\VB and VBA Program Settings\\TabsSpeichern\\Tabs<\/pre>\n<p>Der Eintrag sieht wie in Bild 6 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1507_006.png\" alt=\"Registry-Eintrag f&uuml;r das zuletzt verwendet tab-Element\" width=\"649,559\" height=\"282,8305\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Registry-Eintrag f&uuml;r das zuletzt verwendet tab-Element<\/span><\/b><\/p>\n<p>Die Funktion speichert also je nach angeklicktem Tab den Wert <b>tab1<\/b>, <b>tab2 <\/b>oder <b>tab3 <\/b>in der Registry. Wenn wir das Registry-Fenster direkt neben dem Access-Fenster anzeigen, k&ouml;nnen wir ein anderes <b>tab<\/b>-Element ausw&auml;hlen und sehen nach dem Aktualisieren des Registry-Editors direkt den aktuellen Wert im Element <b>LastUsedTab<\/b>.<\/p>\n<h2>Letztes tab-Element beim &Ouml;ffnen aktivieren<\/h2>\n<p>Damit beim Starten der Anwendung das zuletzt verwendete <b>tab<\/b>-Element wieder aktiviert wird, verwenden wir wieder die Prozedur <b>onLoad_Main<\/b>, die direkt beim Starten der Anwendung und beim erstmaligen Aktivieren des Ribbons ausgel&ouml;st wird. Dieser f&uuml;gen wir die Variable <b>strLastUsedTab <\/b>hinzu, die wir anschlie&szlig;end mit der Funktion <b>GetAppSetting <\/b>f&uuml;llen. <b>GetAppSetting <\/b>liest die soeben geschriebene Information aus der Registry wieder ein und gibt, falls diese dort nicht gefunden werden kann, das <b>tab<\/b>-Element mit dem Namen <b>tab1<\/b> zur&uuml;ck.<\/p>\n<p>Schlie&szlig;lich ruft die Prozedur die <b>ActivateTab<\/b>-Methode des <b>objRibbon_Main<\/b>-Elements auf und stellt so das aktivierte <b>tab<\/b>-Element auf das Element mit dem Namen aus <b>strLastUsedTab <\/b>ein:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>onLoad_Main(ribbon<span style=\"color:blue;\"> As <\/span>IRibbonUI)\r\n     <span style=\"color:blue;\">Dim <\/span>strLastUsedTab<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objRibbon_Main = ribbon\r\n     strLastUsedTab = GetAppSetting(\"LastUsedTab\", \"tab1\")\r\n     objRibbon_Main.ActivateTab strLastUsedTab\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das bedeutet, dass die Anwendung, wenn sie mit aktiviertem <b>tab<\/b>-Element <b>tab2 <\/b>geschlossen wird, dieses auch beim n&auml;chsten &Ouml;ffnen wieder anzeigt. Und so speichert sie immer das beim Schlie&szlig;en gespeicherte <b>tab<\/b>-Element und stellt dieses beim n&auml;chsten &Ouml;ffnen wieder her.<\/p>\n<h2>Ribbon-XML im &Uuml;berblick<\/h2>\n<p>Da wir verschiedene Elemente hinzugef&uuml;gt haben, schauen wir uns nun noch einmal die fertige Ribbondefinition im &Uuml;berblick an (siehe Listing 2).<\/p>\n<pre>&lt;?xml version=\"1.0\"?&gt;\r\n&lt;customUI xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\" onLoad=\"OnLoad_Main\"&gt;\r\n   &lt;ribbon&gt;\r\n     &lt;tabs&gt;\r\n       &lt;tab id=\"tab1\" label=\"Tab 1\"&gt;\r\n         &lt;group id=\"grp11\" label=\"Gruppe 1-1\"&gt;\r\n           &lt;button label=\"Button 1-1-1\" getVisible=\"getVisible\" id=\"btn111\" tag=\"tab1\"\/&gt;\r\n           &lt;button idMso=\"Copy\" size=\"large\"\/&gt;\r\n           &lt;button idMso=\"Cut\" size=\"large\"\/&gt;\r\n           &lt;button idMso=\"Paste\" size=\"large\"\/&gt;\r\n         &lt;\/group&gt;\r\n       &lt;\/tab&gt;\r\n       &lt;tab id=\"tab2\" label=\"Tab 2\"&gt;\r\n         &lt;group id=\"grp21\" label=\"Gruppe 2-1\"&gt;\r\n           &lt;button id=\"btn211\" tag=\"tab2\" getVisible=\"getVisible\" label=\"Button 2-1-1\"\/&gt;\r\n           &lt;button idMso=\"FindDialog\" size=\"large\"\/&gt;\r\n         &lt;\/group&gt;\r\n       &lt;\/tab&gt;\r\n       &lt;tab id=\"tab3\" label=\"Tab 3\"&gt;\r\n         &lt;group id=\"grp31\" label=\"Gruppe 3-1\"&gt;\r\n           &lt;button id=\"btn311\" tag=\"tab3\" getVisible=\"getVisible\" label=\"Button 3-1-1\"\/&gt;\r\n           &lt;button idMso=\"CreateTable\" size=\"large\"\/&gt;\r\n           &lt;button idMso=\"CreateTableInDesignView\" 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><b><span style=\"color:darkgrey;\">Listing 2: Die angepasste Version des Ribbons f&uuml;r das Speichern und Wiederherstellen des zuletzt verwendeten Ribbons<\/span><\/b><\/p>\n<p>Wichtig sind hier im Gegensatz zur ersten Version das Attribut <b>onLoad <\/b>im Element <b>customUI <\/b>und die <b>button<\/b>-Element mit den <b>getVisible<\/b>-Attributen. Au&szlig;erdem m&uuml;ssen diese im <b>tag<\/b>-Attribut den Namen des <b>tab<\/b>-Elements enthalten, in dem sie jeweils angezeigt werden.<\/p>\n<p>Der Code des Moduls <b>mdlRibbons <\/b>sieht nun wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>objRibbon_Main<span style=\"color:blue;\"> As <\/span>IRibbonUI\r\n<span style=\"color:blue;\">Sub <\/span>onLoad_Main(ribbon<span style=\"color:blue;\"> As <\/span>IRibbonUI)\r\n     <span style=\"color:blue;\">Dim <\/span>strLastUsedTab<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objRibbon_Main = ribbon\r\n     strLastUsedTab = GetAppSetting(\"LastUsedTab\", \"tab1\")\r\n     objRibbon_Main.ActivateTab strLastUsedTab\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Sub <\/span>getVisible(control<span style=\"color:blue;\"> As <\/span>IRibbonControl, ByRef visible)\r\n     objRibbon_Main.Invalidate\r\n     SaveAppSetting \"LastUsedTab\", control.Tag\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit fehlen noch die beiden Routinen <b>GetAppSetting <\/b>und <b>SaveAppSetting<\/b>. Diese erl&auml;utern wir im Beitrag <b>Optionen einfach in der Registry speichern <\/b>(<b>www.access-im-unternehmen.de\/1512<\/b>). Vorab noch ein paar Informationen zum Einsatz der dort vorgestellten Funktionen:<\/p>\n<p>Im Bereich <b>VB and VBA Program Settings <\/b>der Registry gibt es eine feste Struktur. Wir k&ouml;nnen dort nicht nach Belieben Eintr&auml;ge anlegen. Die Struktur sieht so aus, dass wir zuerst einen Anwendungsnamen, dann einen Bereich und schlie&szlig;lich den Namen der Einstellung und die Einstellung selbst angeben.<\/p>\n<p>Zus&auml;tzlich gibt es haupts&auml;chlich zwei Funktionen, mit denen wir die Daten in die Registry schreiben und sie auch wieder dort auslesen. Diese hei&szlig;en <b>SaveSetting <\/b>und <b>GetSetting<\/b>. Beide haben die oben genannten vier Parameter (<b>AppName<\/b>, <b>Section<\/b>, <b>Key <\/b>und <b>Setting<\/b>).<\/p>\n<p>Um den Umgang mit diesen Funktionen zu vereinfachen, haben wir die im oben genannten Artikel Optionen in der Registy speichern vorgestellten Funktionen erdacht.<\/p>\n<p>Diese nehmen uns, da wir innerhalb einer Anwendung ohnehin zumindest immer den gleichen Anwendungsnamen verwenden und meist auch nur eine Sektion, die Arbeit ab, die ersten beiden Parameter immer wieder anzugeben.<\/p>\n<p>Wir m&uuml;ssen diese jedoch einmalig als Konstanten speichern:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>Const cStrAppName<span style=\"color:blue;\"> As String<\/span> = \"TabsSpeichern\"\r\n<span style=\"color:blue;\">Public <\/span>Const cStrSection<span style=\"color:blue;\"> As String<\/span> = \"Tabs\"<\/pre>\n<p>Danach k&ouml;nnen wir Registryeintr&auml;ge einfach mit den Funktionen <b>SaveAppSetting <\/b>und <b>GetAppSetting <\/b>erledigen.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Beitrag zeigt, wie man das zuletzt verwendete Ribbon-Tab in der Registry speichern und dieses beim n&auml;chsten Start wiederherstellen kann.<\/p>\n<p>Das ist f&uuml;r Anwendungen praktisch, in denen man immer wieder zu Beginn das gleiche Tab nutzt oder in denen man gern mit dem Tab beginnt, mit dem man zuletzt die Arbeit mit der Anwendung beendet hat.<\/p>\n<p>Die hier vorgestellte Technik kann man in abgewandelter Form auch zum Speichern anderer Einstellungen des Ribbons nutzen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>RibbonTabMerken.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/FB7C1ABC-D925-4900-9490-22E5D6242331\/aiu_1507.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer das Ribbon ausgiebig nutzt, hat schnell einige Tabs zusammen, die wiederum mehrere Gruppen mit den jeweiligen Steuerelementen enthalten. Diese Tabs sind in der Regel so ausgelegt, dass das zuerst angezeigte Tab aktiviert wird, wenn der Benutzer die Anwendung startet. Wenn der Benutzer aber regelm&auml;&szlig;ig eher mit den Aufgaben einsteigt, die sich in einem anderen Tab befinden, muss er jedes Mal erst noch zu diesem Tab wechseln. Um dies zu vereinfachen, stellen wir in diesem Beitrag eine L&ouml;sung vor, mit der sich die Anwendung das zuletzt verwendete Tab-Element merken kann und dieses beim n&auml;chsten Start wiederherstellt. <\/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":[662024,66042024,44000028],"tags":[],"class_list":["post-55001507","post","type-post","status-publish","format-standard","hentry","category-662024","category-66042024","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>Letztes ge&ouml;ffnetes Ribbon-Tab merken - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Letztes ge&ouml;ffnetes Ribbon-Tab merken\" \/>\n<meta property=\"og:description\" content=\"Wer das Ribbon ausgiebig nutzt, hat schnell einige Tabs zusammen, die wiederum mehrere Gruppen mit den jeweiligen Steuerelementen enthalten. Diese Tabs sind in der Regel so ausgelegt, dass das zuerst angezeigte Tab aktiviert wird, wenn der Benutzer die Anwendung startet. Wenn der Benutzer aber regelm&auml;&szlig;ig eher mit den Aufgaben einsteigt, die sich in einem anderen Tab befinden, muss er jedes Mal erst noch zu diesem Tab wechseln. Um dies zu vereinfachen, stellen wir in diesem Beitrag eine L&ouml;sung vor, mit der sich die Anwendung das zuletzt verwendete Tab-Element merken kann und dieses beim n&auml;chsten Start wiederherstellt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-01T09:53:56+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=\"13\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Letztes ge&ouml;ffnetes Ribbon-Tab merken\",\"datePublished\":\"2024-08-01T09:53:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/\"},\"wordCount\":2094,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/b6d778e682d749e38b476f34782e0808\",\"articleSection\":[\"2024\",\"4\\\/2024\",\"Ergonomie und Benutzeroberfl\u00e4che\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/\",\"name\":\"Letztes ge&ouml;ffnetes Ribbon-Tab merken - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/b6d778e682d749e38b476f34782e0808\",\"datePublished\":\"2024-08-01T09:53:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/b6d778e682d749e38b476f34782e0808\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/b6d778e682d749e38b476f34782e0808\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Letztes_geoeffnetes_RibbonTab_merken\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Letztes ge&ouml;ffnetes Ribbon-Tab merken\"}]},{\"@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":"Letztes ge&ouml;ffnetes Ribbon-Tab merken - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/","og_locale":"de_DE","og_type":"article","og_title":"Letztes ge&ouml;ffnetes Ribbon-Tab merken","og_description":"Wer das Ribbon ausgiebig nutzt, hat schnell einige Tabs zusammen, die wiederum mehrere Gruppen mit den jeweiligen Steuerelementen enthalten. Diese Tabs sind in der Regel so ausgelegt, dass das zuerst angezeigte Tab aktiviert wird, wenn der Benutzer die Anwendung startet. Wenn der Benutzer aber regelm&auml;&szlig;ig eher mit den Aufgaben einsteigt, die sich in einem anderen Tab befinden, muss er jedes Mal erst noch zu diesem Tab wechseln. Um dies zu vereinfachen, stellen wir in diesem Beitrag eine L&ouml;sung vor, mit der sich die Anwendung das zuletzt verwendete Tab-Element merken kann und dieses beim n&auml;chsten Start wiederherstellt.","og_url":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/","og_site_name":"Access im Unternehmen","article_published_time":"2024-08-01T09:53:56+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"13\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Letztes ge&ouml;ffnetes Ribbon-Tab merken","datePublished":"2024-08-01T09:53:56+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/"},"wordCount":2094,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/b6d778e682d749e38b476f34782e0808","articleSection":["2024","4\/2024","Ergonomie und Benutzeroberfl\u00e4che"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/","url":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/","name":"Letztes ge&ouml;ffnetes Ribbon-Tab merken - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/b6d778e682d749e38b476f34782e0808","datePublished":"2024-08-01T09:53:56+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/b6d778e682d749e38b476f34782e0808","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/b6d778e682d749e38b476f34782e0808"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Letztes_geoeffnetes_RibbonTab_merken\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Letztes ge&ouml;ffnetes Ribbon-Tab merken"}]},{"@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\/55001507","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=55001507"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001507\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}