{"id":55000657,"date":"2009-04-01T00:00:00","date_gmt":"2020-05-22T22:22:10","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=657"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Dynamische_Ribbons","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/","title":{"rendered":"Dynamische Ribbons"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/a57797bdaa1d4833acbf273eddacc235\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Ein Men&uuml; ist ein wichtiges Element bei der Steuerung einer Softwareanwendung. Unter Office gibt es seit der Version 2007 eine neue Variante der bis dato verwendeten Men&uuml;- und Symbolleisten: das Ribbon. Auch wenn es noch Schlupfl&ouml;cher gibt, die den Einsatz der alten Men&uuml;s in .mdb-Dateien unter Access 2007 erlauben, werden Sie sich als Access-Entwickler fr&uuml;her oder sp&auml;ter mit dem Programmieren des Ribbons besch&auml;ftigen m&uuml;ssen. Wir zeigen, wie Sie das Ribbon mit Leben f&uuml;llen.<\/b><\/p>\n<p>&#8222;Sie werden sich mit dem Programmieren des Ribbons besch&auml;ftigen m&uuml;ssen&#8220; &#8211; das h&ouml;rt sich sehr danach an, als ob die Besch&auml;ftigung mit dem Ribbon nicht unbedingt auf uneingeschr&auml;nkte Gegenliebe st&ouml;&szlig;t.<\/p>\n<p>In der Tat ist es wohl mit vielem Neuen, f&uuml;r das man lieb gewonnene Gewohnheiten und Techniken aufgeben muss: Sie k&ouml;nnen in wenigen Sekunden ganze Men&uuml;s und Symbolleisten mit dem Anpassen-Dialog zusammenklicken Sie haben tolle Klassen, die Men&uuml;strukturen aus Tabellen einlesen, um diese zur Laufzeit zusammenzustellen Vergessen Sie es, denn nun hei&szlig;t es wie bei Peter Fox: &quot;Hey, alles gl&auml;nzt, so sch&ouml;n neu!&quot;<\/p>\n<p>In der Tat bietet das Ribbon ganz andere M&ouml;glichkeiten als die alten Men&uuml;s. So kann man Befehle zu dritt untereinander anordnen oder wahlweise einen Befehl mit einer gro&szlig;en Schaltfl&auml;che auf dem gleichen Platz anzeigen und es gibt eine ganze Reihe neuer Steuerelemente. F&uuml;r den Entwickler am wichtigsten ist aber die Technik, und auch die ist rundum erneuert, was sich vor allem in der Definition des Aussehens des Ribbons per XML widerspiegelt.<\/p>\n<p>Im gleichen XML-Dokument, das auch die &auml;u&szlig;erlichen Merkmale festlegt, geben Sie auch an, was beim Verwenden der enthaltenen Steuerelemente geschehen soll oder ob bereits der Aufbau des Ribbons teilweise durch VBA-Routinen unterst&uuml;tzt werden soll.<\/p>\n<p>F&uuml;r alle Neulinge in der Ribbon-Welt sei an dieser Stelle vermerkt, dass eine ausf&uuml;hrliche Einf&uuml;hrung wohl leicht ein komplettes Heft wie das vorliegende f&uuml;llen k&ouml;nnte. Wir k&ouml;nnen daher nicht bei Adam und Eva anfangen, lassen Sie aber auch nicht im Ribbon &#8230; &#8211; Verzeihung, Regen stehen. Im Buch <b>Access 2007 &#8211; Das Grundlagenbuch f&uuml;r Entwickler <\/b>(ISBN 978-3-8273-2459-7) gibt es ein komplettes Kapitel von 60 Seiten zu diesem Thema, das unter <b>http:\/\/www.access-entwicklerbuch.de\/2007\/download\/AEB2007_Kapitel12.pdf <\/b>kostenlos zum Download bereitsteht. Dort erhalten Sie die f&uuml;r das Verst&auml;ndnis dieses Beitrags notwendigen Grundkenntnisse wie etwa zum Aufbau eines XML-Dokuments zur Definition eines Ribbons, die wir an dieser Stelle aus Platzgr&uuml;nden nicht wiederholen m&ouml;chten.<\/p>\n<p>In diesem Beitrag wollen wir die Grundlagen f&uuml;r den Einsatz der sogenannten Callback-Funktionen liefern und mit einigen Beispielen zeigen, wie Sie das Ribbon nicht nur als Ergebnis eines statischen XML-Konstrukts verwenden, das beim Klicken auf die Steuerelemente die eine oder andere Funktion aufruft. Stattdessen erfahren Sie hier, welche Callback-Funktionen wann aufgerufen werden und wie Sie selbst die Aktualisierung des Ribbons ausl&ouml;sen k&ouml;nnen.<\/p>\n<p>In loser Folge werden wir Ihnen dann in weiteren Beitr&auml;gen das Ribbon und die interessantesten Techniken n&auml;herbringen &#8211; zum Beispiel, indem wir Ihnen zeigen, wie Sie die verschiedenen Typen von Kombinationsfeldern f&uuml;llen oder wie Sie am einfachsten Bilder im Ribbon anzeigen.<\/p>\n<p><b>Aufbau der Beispieldatenbank<\/b><\/p>\n<p>Sie finden die nachfolgend beschriebenen Beispiele in der Beispieldatenbank. Wenn Sie diese dennoch selbst nachvollziehen m&ouml;chten, hier einige kurze Hinweise:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Sie ben&ouml;tigen eine Tabelle namens <b>USysRibbons <\/b>mit den Feldern <b>ID <\/b>(<b>Autowert<\/b>), <b>Ribbonname <\/b>(<b>Text<\/b>) und <b>RibbonXML <\/b>(<b>Memo<\/b>). Darin speichern Sie die Ribbon-Definitionen.<\/li>\n<li class=\"aufz-hlung\">Die Tabelle <b>USysRibbons <\/b>ist nach dem Speichern bei Verwendung von Standardeinstellungen nicht mehr sichtbar, weil sie infolge der Verwendung des Pr&auml;fix <b>USys<\/b> eine Systemtabelle wird. Sie brauchen diese nicht sichtbar zu machen. Kopieren Sie stattdessen das Formular <b>frmRibbons <\/b>aus der Beispieldatenbank in Ihre Datenbank. Damit k&ouml;nnen Sie die Ribbon-Definitionen prima anpassen.<\/li>\n<li class=\"aufz-hlung\">Sie ben&ouml;tigen ein Modul namens <b>mdlRibbons<\/b>, das die Callback-Funktionen f&uuml;r die Ribbons aufnimmt.<\/li>\n<li class=\"aufz-hlung\">Wenn Sie benutzerdefinierte Bilder im Ribbon anzeigen m&ouml;chten, die Sie in einer Tabelle in der Datenbank speichern (was empfehlenswert ist), importieren Sie auch noch das Modul <b>mdlRibbonImages<\/b>. Es enth&auml;lt eine Methode <b>PicFromField<\/b>, mit der Sie in OLE-Feldern gespeicherte Images leicht in ein <b>StdPicture<\/b>-Objekt f&uuml;llen k&ouml;nnen, das dann f&uuml;r die Anzeige des Bildes im Ribbon verwendet werden kann.<\/li>\n<li class=\"aufz-hlung\">Um Bilder in einer Tabelle der Datenbank zu speichern, um diese f&uuml;r das Ribbon bereitzustellen, brauchen Sie erstens eine passende Tabelle. Diese nennen wir <b>USysImages<\/b>; Sie k&ouml;nnen sich diese von der Beispieldatenbank holen und in Ihre eigene Anwendung kopieren.<\/li>\n<li class=\"aufz-hlung\">Irgendwie m&uuml;ssen die Bilddateien ja auch noch in die Tabelle <b>USysImages <\/b>gelangen. Das erledigen Sie &uuml;ber die Routine <b>ImageHinzufuegen <\/b>und einige abh&auml;ngige Funktionen aus dem Modul <b>mdlTools <\/b>der Beispieldatenbank. Die Routine rufen Sie einfach auf, indem Sie diese im VBA-Fenster markieren und auf <b>F5<\/b> dr&uuml;cken &#8211; es erscheint dann ein <b>Datei &ouml;ffnen<\/b>-Dialog, mit dem Sie auch gleich mehrere Bilder auf einen Rutsch importieren k&ouml;nnen. Beachten Sie dabei, dass die Bilder m&ouml;glichst transparente Bereiche unters&uuml;tzen sollten und die Zieltabelle <b>USysImages <\/b>vorhanden sein muss.<\/li>\n<li class=\"aufz-hlung\">F&uuml;gen Sie Ihrer Datenbank einen Verweis auf die Bibliothek <b>Microsoft Office 12.0 Object Library <\/b>hinzu.<\/li>\n<li class=\"aufz-hlung\">Stellen Sie in den Access-Optionen im Bereich <b>Erweitert <\/b>die Option <b>Fehler in Benutzeroberfl&auml;chen von Add-Ins anzeigen <\/b>auf <b>Ja <\/b>ein.<\/li>\n<\/ul>\n<p><b>Ribbons testen<\/b><\/p>\n<p>Normalerweise m&uuml;ssen Sie, das k&ouml;nnen Sie in der oben angef&uuml;hrten Literatur im Detail nachlesen, die Datenbankanwendung jeweils mindestens einmal neu starten, wenn Sie eine &auml;nderung an der Ribbon-Definition vorgenommen haben. Unser Testformular <b>frmRibbons <\/b>verk&uuml;rzt diesen Aufwand merklich: Sie brauchen dort nur die gew&uuml;nschte Ribbon-Definition einzutragen (die dann ja ohnehin in der Tabelle <b>USysRibbons <\/b>landet, sofern diese vorliegt) und auf die Schaltfl&auml;che <b>Anzeigen<\/b> zu klicken &#8211; schon zeigt Access die Ribbon-Anpassungen an (siehe Bild 2).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_02\/Dynamische-Ribbons-web-images\/pic001_opt.jpeg\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Ribbon mit einer einfachen Schaltfl&auml;che<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_02\/Dynamische-Ribbons-web-images\/pic002_opt.jpeg\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Das Formular frmRibbons hilft beim Testen neuer Ribbon-Definitionen.<\/span><\/b><\/p>\n<p><!--30percent--><\/p>\n<p><b>Kn&ouml;pfchen dr&uuml;cken<\/b><\/p>\n<p>Um dies nicht auszulassen, starten wir mit dem einfachsten aller Callback-Attribute: <b>onAction<\/b>. Es ist beispielsweise im <b>button<\/b>-Element zu finden, wie es das folgende XML-Dokument zu Bild 1 zeigt (siehe Beispieldatenbank, <b>USysRibbons<\/b>, Ribbonname: <b>EinfacherCallback<\/b>):<\/p>\n<pre>&lt;xml version=&quot;1.0&quot;&gt;\r\n&lt;customUI xmlns=&quot;...&quot; loadImage=&quot;loadImage&quot;&gt;\r\n&lt;ribbon startFromScratch=&quot;true&quot;&gt;\r\n&lt;tabs&gt;\r\n&lt;tab id=&quot;tabButton&quot;\r\nlabel=&quot;onAction-Beispiel&quot;&gt;\r\n&lt;group id=&quot;grpButton&quot;\r\nlabel=&quot;onAction-Beispiel&quot;&gt;\r\n&lt;button id=&quot;btnBeispiel&quot;\r\nimage=&quot;alarmclock_preferences.png&quot;\r\nlabel=&quot;Klick mich!&quot;\r\nonAction=&quot;OnAction&quot; size=&quot;large&quot;\/&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>Das <b>onAction<\/b>-Attribut im <b>button<\/b>-Element enth&auml;lt den Namen der VBA-Prozedur, die beim Klick auf dieses Element aufgerufen wird. Dazu muss die Routine eine spezielle Syntax aufweisen, die so aussieht:<\/p>\n<pre>Sub OnAction(control As IRibbonControl)\r\n    MsgBox control.ID\r\n    End Sub<\/pre>\n<p>Diese Routine schreiben Sie in das bereits vorbereitete Standardmodul <b>mdlRibbons <\/b>und sorgen so daf&uuml;r, dass beim Klick auf die Schaltfl&auml;che der Name derselben, hier <b>btnBeispiel<\/b>, in einem Meldungsfenster angezeigt wird. &Uuml;blicherweise gibt es mehr als eine Schaltfl&auml;che mit dem <b>onAction<\/b>-Attribut. Beim Anlegen der Callback-Funktionen gibt es nun mehr m&ouml;glichkeiten als bei herk&ouml;mmlichen Ereignisprozeduren:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Sie legen f&uuml;r jedes <b>onAction<\/b>-Callback-Attribut eine eigene Callback-Funktion an und benennen sie beispielsweise nach dem Schema <b>&lt;Steuerelementname&gt;_OnAction<\/b>, hier also etwa <b>btnBeispiel_OnAction<\/b>.<\/li>\n<li class=\"aufz-hlung\">Andererseits liefert eine solche Callback-Funktion den Namen des aufrufenden Elements mit. Sie k&ouml;nnten also eine Callback-Funktion mit einer <b>Select Case<\/b>-Anweisung ausstatten und je nach aufrufendem Steuerelement die richtigen Anweisungen ausf&uuml;hren.<\/li>\n<\/ul>\n<p>Letzteres w&uuml;rde so aussehen:<\/p>\n<pre>Sub OnAction(control As IRibbonControl)\r\n    Select Case control.ID\r\n    Case &quot;btnBeispiel&quot;\r\n    &apos;tu was\r\n    Case ...\r\n    End Select\r\n    End Sub<\/pre>\n<p>Wie man hier vorgeht, h&auml;ngt sicher von den pers&ouml;nlichen Vorlieben ab. Die Verwendung einer eigenen Callback-Funktion je Steuerelement h&auml;tte den Vorteil, dass man diese leicht separat herausl&ouml;sen und anderweitig verwenden k&ouml;nnte &#8211; auch weil dann die entsprechenden Attribute der Steuerelemente mit dem passenden Callback-Funktionsnamen ausgestattet sind.<\/p>\n<p><b>Statischer und dynamischer Aufbau<\/b><\/p>\n<p>Auch wenn Ribbon-Aktionen wie ein Mausklick auf eine Schaltfl&auml;che letztlich per VBA-Routine (oder auch per Makro) ausgef&uuml;hrt werden m&uuml;ssen, k&ouml;nnen Sie das Ribbon komplett statisch, also mit reinem XML-Code aufbauen.<\/p>\n<p>Sie k&ouml;nnen aber an vielen Stellen durch einfache Callback-Funktionen Werte von Eigenschaften der Steuerelemente und des Ribbons selbst (im XML-Slang: Attribute) dynamisch zuweisen.<\/p>\n<p>Ein Beispiel ist das folgende (wir lassen nun die immer wiederkehrenden Elemente der Ribbon-Definition weg, soweit diese keine wesentlichen Informationen liefern).<\/p>\n<p>Das erste Bezeichnungsfeld wird statisch mit dem Ausdruck <b>Bezeichnungsfeldtext <\/b>gef&uuml;llt, das zweite bezieht seine Bezeichnung aus der Callback-Funktion <b>GetLabel<\/b> (siehe Beispieldatenbank, Tabelle <b>USysRibbons<\/b>, Ribbon <b>GetLabelBeispiel<\/b>):<\/p>\n<pre>...\r\n&lt;group id=&quot;grpBeispielLabel&quot; label=&quot;Bezeichnungsfelder&quot;&gt;\r\n&lt;labelControl id=&quot;lblBeispielStatisch&quot; label=&quot;Bezeichnungsfeldtext&quot;\/&gt;\r\n&lt;labelControl id=&quot;lblBeispielDynamisch&quot; getLabel=&quot;GetLabel&quot;\/&gt;\r\n&lt;\/group&gt;\r\n...<\/pre>\n<p><b>GetLabel <\/b>sieht dabei wie folgt aus und liefert &uuml;ber den Parameter <b>label <\/b>schlicht eine entsprechende Zeichenkette f&uuml;r das Steuerelement mit dem Namen <b>lblBeispielDynamisch <\/b>zur&uuml;ck:<\/p>\n<pre>Sub GetLabel(control As IRibbonControl, _\r\n    ByRef label)\r\n    Select Case control.ID\r\n    Case &quot;lblBeispielDynamisch&quot;\r\n    label = &quot;Dies ist ein dynamisch &micro;\r\n    erzeugtes Label.&quot;\r\n    End Select\r\n    End Sub<\/pre>\n<p>Auf die gleiche Weise k&ouml;nnen Sie die Werte f&uuml;r all jene Attribute zur Laufzeit zuweisen, deren Name mit <b>get&#8230; <\/b>beginnt und die einen Text erwarten, also <b>getDescription<\/b>, <b>getItemLabel<\/b>, <b>getItemScreentip<\/b>, <b>getItemSupertip<\/b>, <b>getKeytip<\/b>, <b>getLabel<\/b>, <b>getScreentip<\/b>, <b>getSupertip<\/b>, <b>getText <\/b>und <b>getTitle<\/b>. Es gibt noch einige weitere Attribute, die auf die gleiche Weise bedient werden k&ouml;nnen, aber Informationen auf Basis anderer Datentypen verlangen &#8211; mehr dazu sp&auml;ter.<\/p>\n<p><b>Dynamik auf Wunsch<\/b><\/p>\n<p>Zun&auml;chst nutzen wir das Beispiel des Bezeichnungsfeldes, um zu zeigen, wie Sie ein Attribut eines Ribbon-Elements zur Laufzeit &auml;ndern k&ouml;nnen.<\/p>\n<p>Dazu ist ein wenig Vorbereitung notwendig, denn Sie brauchen einen Verweis auf die durch Ihre Ribbon-Definition durchgef&uuml;hrten Ribbon-Anpassungen. Office (ja, Office &#8211; das Ribbon ist keine Access-interne Angelegenheit) stellt daf&uuml;r ein Objekt namens <b>IRibbonUI <\/b>zur Verf&uuml;gung. Als N&auml;chstes legen Sie die Objektvariable f&uuml;r das <b>IRibbonUI<\/b>-Objekt an, was normalerweise so aussieht:<\/p>\n<pre>Dim objRibbon As IRibbonUI<\/pre>\n<p>Da es aber theoretisch verschiedene Ribbon-Definitionen geben kann, die gleichzeitig angezeigt und gegebenenfalls auch aktualisiert werden sollen, erh&auml;lt diese Variable als Zusatz die Bezeichnung des Ribbons aus der Tabelle <b>USysRibbons<\/b>, zum Beispiel:<\/p>\n<pre>Dim objRibbon_EinfacherCallback As IRibbonUI<\/pre>\n<p>Diese m&uuml;ssen Sie nun f&uuml;llen. Es gibt nur eine einzige Gelegenheit dazu: das Anzeigen des Ribbons. Damit Sie in VBA auf diesen Moment reagieren k&ouml;nnen, m&uuml;ssen Sie dem <b>CustomUI<\/b>-Element der Ribbon-Definition ein weiteres Callback-Attribut namens <b>onLoad <\/b>hinzuf&uuml;gen und diesem den Namen der aufzurufenden Prozedur zuweisen.<\/p>\n<p>Da jede Ribbon-Definition ihre eigene <b>OnLoad<\/b>-Callback-Funktion erhalten soll, erg&auml;nzen Sie auch deren Bezeichnung um den Namen des Ribbons:<\/p>\n<pre>Sub onLoad_EinfacherCallback(ribbon As IRibbonUI)\r\n    Set objRibbon_EinfacherCallback = ribbon\r\n    End Sub<\/pre>\n<p>Wenn Sie den Objektnamen der Ribbon-Objektvariablen gefolgt von einem Punkt in einer Prozedur eingeben, zeigt der VBA-Editor die verf&uuml;gbaren Methoden f&uuml;r dieses Objekt an (siehe Bild 3).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_02\/Dynamische-Ribbons-web-images\/pic003_opt.jpeg\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Die Methoden des IRibbonUI-Objekts<\/span><\/b><\/p>\n<p>Die beiden Methoden <b>Invalidate <\/b>und <b>InvalidateControl <\/b>unterscheiden sich dadurch, dass <b>Invalidate <\/b>sich auf alle Elemente der mit dem <b>IRibbonUI<\/b>-Objekt referenzierten Ribbon-Definition auswirkt und <b>InvalidateControl <\/b>nur auf das im einzigen Parameter angegebene.<\/p>\n<p>Fehlt nur noch die Erl&auml;uterung der Funktion: Die beiden Routinen sorgen daf&uuml;r, dass Steuerelemente in einen Zustand versetzt werden, der daf&uuml;r sorgt, dass deren <b>get&#8230;<\/b>-Callback-Funktionen (also beispielsweise <b>getLabel<\/b>) bei der n&auml;chsten Anzeige erneut aufgerufen werden.<\/p>\n<p>Dabei unterscheiden wir zwei F&auml;lle:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Ein Element ist gerade sichtbar, wodurch die <b>get&#8230;<\/b>-Callbacks direkt aufgerufen werden.<\/li>\n<li class=\"aufz-hlung\">Ein Element ist nicht sichtbar. Dann werden die <b>get&#8230;<\/b>-Callbacks tats&auml;chlich erst beim n&auml;chsten Anzeigen des jeweiligen Elements ausgel&ouml;st.<\/li>\n<\/ul>\n<p>Wie k&ouml;nnen wir das ausprobieren Nun: Wir &auml;ndern die Callback-Funktion, welche den Text f&uuml;r das Bezeichnungsfeld <b>lblBeispielDynamisch <\/b>lieferte, wie folgt ab:<\/p>\n<pre>Sub GetLabel(control As IRibbonControl, ByRef label)\r\n    Select Case control.ID\r\n    Case &quot;lblBeispielDynamisch&quot;\r\n    label = Now\r\n    End Select\r\n    End Sub<\/pre>\n<p>Das Bezeichnungsfeld zeigt also die jeweils beim Aufruf der Callback-Funktion aktuelle Zeit an. So k&ouml;nnen Sie gut erkennen, wann die Callback-Funktion aufgerufen wurde.<\/p>\n<p>Nun bauen wir eine kleine Prozedur zusammen, welche die <b>Invalidate<\/b>-Methode des <b>IRibbonUI<\/b>-Objekts ausl&ouml;st:<\/p>\n<pre>Public Sub Test_Invalidate()\r\nobjRibbon_EinfacherCallback.Invalidate\r\nEnd Sub<\/pre>\n<p>Wenn Sie das Ribbon nun anzeigen und aktivieren, das VBA-Fenster so &ouml;ffnen, dass es das Ribbon nicht verdeckt, und die Routine <b>Test_Invalidate <\/b>aufrufen, sollte der Inhalt des Bezeichnungsfeldes jeweils aktualisiert werden.<\/p>\n<p>Wenn Sie folgende Dinge verinnerlichen, werden Sie kaum Probleme mit der Programmierung von Ribbons bekommen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Sie m&uuml;ssen f&uuml;r jede Ribbon-Definition eine eigene <b>IRibbonUI<\/b>-Variable deklarieren und diese im <b>onLoad<\/b>-Callback des Ribbons zuweisen.<\/li>\n<li class=\"aufz-hlung\">Die Methoden <b>Invalidate <\/b>und <b>InvalidateControl <\/b>des jeweiligen <b>IRibbonUI<\/b>-Elements sorgen daf&uuml;r, dass alle oder ein bestimmtes Steuerelement aktualisiert werden &#8211; und zwar auf Basis der vorhandenen <b>get&#8230;<\/b>-Callback-Funktionen.<\/li>\n<\/ul>\n<p><b>Elemente aktivieren und deaktivieren<\/b><\/p>\n<p>Ein ebenfalls sehr einfach einzusetzendes Callback-Attribut ist <b>getEnabled<\/b>. Damit k&ouml;nnen Sie Steuerelemente des Ribbons aktivieren oder deaktivieren. Der Unterschied zu den <b>get&#8230;<\/b>-Callbacks zur R&uuml;ckgabe von Texten liegt schlicht und einfach im Datentyp &#8211; dort liefern Sie einen Text zur&uuml;ck, hier einen Boolean-Wert.<\/p>\n<p>Die Definition einer Beispielschaltfl&auml;che sieht so aus:<\/p>\n<pre>&lt;button id=&quot;btnBeispiel&quot; getEnabled=&quot;GetEnabled&quot; getLabel=&quot;GetLabel&quot;\/&gt;<\/pre>\n<p>Dabei haben wir nicht nur das <b>enabled<\/b>-, sondern auch das <b>label<\/b>-Attribut durch das entsprechende Callback-Attribut ersetzt.<\/p>\n<p>F&uuml;r beide Werte legen Sie im VBA-Modul passende Variablen an:<\/p>\n<pre>Dim bolAktiviert As Boolean\r\nDim strAktiviert As String<\/pre>\n<p>Diese werden in der <b>onLoad<\/b>-Callback-Funktion der Ribbondefinition (siehe <b>Beispieldatenbank<\/b>, Tabelle <b>USysRibbons<\/b>, <b>ElementAktivieren<\/b>) erstmalig gesetzt:<\/p>\n<pre>Sub onLoad_ElementAktivieren(ribbon As IRibbonUI)\r\nSet objRibbon_ElementAktivieren = ribbon\r\nbolAktiviert = True\r\nstrAktiviert = &quot;Aktiviert&quot;\r\nEnd Sub<\/pre>\n<p>Ob die Schaltfl&auml;che aktiviert werden soll oder nicht entscheidet sich in der Callback-Funktion <b>GetEnabled<\/b>:<\/p>\n<pre>Sub GetEnabled(control As IRibbonControl, &micro;\r\nByRef enabled)\r\nSelect Case control.ID\r\nCase &quot;btnBeispiel&quot;\r\nenabled = bolAktiviert\r\nEnd Select\r\nEnd Sub<\/pre>\n<p>&auml;hnlich sieht es beim Zuweisen des Werts f&uuml;r die Beschriftung aus:<\/p>\n<pre>Sub GetLabel(control As IRibbonControl, &micro;\r\nByRef label)\r\nSelect Case control.ID\r\nCase &quot;lblBeispielDynamisch&quot;\r\nlabel = Now\r\nCase &quot;btnBeispiel&quot;\r\nlabel = strAktiviert\r\nEnd Select\r\nEnd Sub<\/pre>\n<p>Beide Funktionen holen die zuzuweisenden Werte aus entsprechenden Variablen, die Sie vor dem Aktualisieren des Ribbons mit einer der <b>Invalidate<\/b>-Methoden anpassen m&uuml;ssen. Zum Aktivieren und Deaktivieren k&ouml;nnen Sie etwa diese Routine verwenden (es wird jeweils der andere Zustand eingestellt):<\/p>\n<pre>Public Sub ButtonAktivierenDeaktivieren()\r\nbolAktiviert = Not bolAktiviert\r\nstrAktiviert = IIf(bolAktiviert, &micro;\r\n&quot;Aktiviert&quot;, &quot;Deaktiviert&quot;)\r\nobjRibbon_ElementAktivieren.Invalidate\r\nEnd Sub<\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Dieser Beitrag liefert die Grundlagen f&uuml;r die VBA-unterst&uuml;tzte Steuerung und Anpassung des Ribbons sowie f&uuml;r das Reagieren auf die Ereignisse des Ribbons und seiner Steuerelemente. Dazu geh&ouml;rt vor allem, dass Sie eine Objektvariable des Typs <b>IRibbonUI <\/b>anlegen und diese mit einem Verweis auf neu erzeugte Ribbons f&uuml;llen &#8211; anderenfalls k&ouml;nnen Sie in der Folge nicht mehr auf das Ribbon zugreifen, um dieses zu beeinflussen.<\/p>\n<p>Au&szlig;erdem haben Sie eine Beispieldatenbank erhalten, die einige Routinen f&uuml;r den t&auml;glichen Umgang mit dem Ribbon liefert &#8211; auch diese erl&auml;utern wir in weiteren Beitr&auml;gen noch im Detail.<\/p>\n<p>Das war allerdings noch l&auml;ngst nicht alles, was es zu diesem Thema zu berichten gibt. In weiteren Beitr&auml;gen zeigen wir Ihnen in loser Folge, was das Ribbon noch alles kann und was Sie mit ihm anstellen k&ouml;nnen.<\/p>\n<p>Dazu geh&ouml;ren der Umgang mit Kombinationsfeldern, Ribbons und Formulare, Bilder im Ribbon und fehlerresistentes Speichern von Ribbon-Variablen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DynamischeRibbons.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{BA59EB41-FDEC-49D8-8A00-019A6E4EA57B}\/aiu_657.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein Men&uuml; ist ein wichtiges Element bei der Steuerung einer Softwareanwendung. Unter Office gibt es seit der Version 2007 eine neue Variante der bis dato verwendeten Men&uuml;- und Symbolleisten: das Ribbon. Auch wenn es noch Schlupfl&ouml;cher gibt, die den Einsatz der alten Men&uuml;s in .mdb-Dateien unter Access 2007 erlauben, werden Sie sich als Access-Entwickler fr&uuml;her oder sp&auml;ter mit dem Programmieren des Ribbons besch&auml;ftigen m&uuml;ssen. Wir zeigen, wie Sie das Ribbon mit Leben f&uuml;llen.<\/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":[66022009,662009,44000028],"tags":[],"class_list":["post-55000657","post","type-post","status-publish","format-standard","hentry","category-66022009","category-662009","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>Dynamische Ribbons - 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\/Dynamische_Ribbons\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dynamische Ribbons\" \/>\n<meta property=\"og:description\" content=\"Ein Men&uuml; ist ein wichtiges Element bei der Steuerung einer Softwareanwendung. Unter Office gibt es seit der Version 2007 eine neue Variante der bis dato verwendeten Men&uuml;- und Symbolleisten: das Ribbon. Auch wenn es noch Schlupfl&ouml;cher gibt, die den Einsatz der alten Men&uuml;s in .mdb-Dateien unter Access 2007 erlauben, werden Sie sich als Access-Entwickler fr&uuml;her oder sp&auml;ter mit dem Programmieren des Ribbons besch&auml;ftigen m&uuml;ssen. Wir zeigen, wie Sie das Ribbon mit Leben f&uuml;llen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:22:10+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/a57797bdaa1d4833acbf273eddacc235\" \/>\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=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Dynamische Ribbons\",\"datePublished\":\"2020-05-22T22:22:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/\"},\"wordCount\":2398,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a57797bdaa1d4833acbf273eddacc235\",\"articleSection\":[\"2\\\/2009\",\"2009\",\"Ergonomie und Benutzeroberfl\u00e4che\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/\",\"name\":\"Dynamische Ribbons - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a57797bdaa1d4833acbf273eddacc235\",\"datePublished\":\"2020-05-22T22:22:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a57797bdaa1d4833acbf273eddacc235\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a57797bdaa1d4833acbf273eddacc235\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Ribbons\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dynamische Ribbons\"}]},{\"@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":"Dynamische Ribbons - 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\/Dynamische_Ribbons\/","og_locale":"de_DE","og_type":"article","og_title":"Dynamische Ribbons","og_description":"Ein Men&uuml; ist ein wichtiges Element bei der Steuerung einer Softwareanwendung. Unter Office gibt es seit der Version 2007 eine neue Variante der bis dato verwendeten Men&uuml;- und Symbolleisten: das Ribbon. Auch wenn es noch Schlupfl&ouml;cher gibt, die den Einsatz der alten Men&uuml;s in .mdb-Dateien unter Access 2007 erlauben, werden Sie sich als Access-Entwickler fr&uuml;her oder sp&auml;ter mit dem Programmieren des Ribbons besch&auml;ftigen m&uuml;ssen. Wir zeigen, wie Sie das Ribbon mit Leben f&uuml;llen.","og_url":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:22:10+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/a57797bdaa1d4833acbf273eddacc235","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Dynamische Ribbons","datePublished":"2020-05-22T22:22:10+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/"},"wordCount":2398,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/a57797bdaa1d4833acbf273eddacc235","articleSection":["2\/2009","2009","Ergonomie und Benutzeroberfl\u00e4che"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/","url":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/","name":"Dynamische Ribbons - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/a57797bdaa1d4833acbf273eddacc235","datePublished":"2020-05-22T22:22:10+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/a57797bdaa1d4833acbf273eddacc235","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/a57797bdaa1d4833acbf273eddacc235"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Ribbons\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Dynamische Ribbons"}]},{"@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\/55000657","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=55000657"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000657\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000657"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000657"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}