{"id":55000676,"date":"2009-08-01T00:00:00","date_gmt":"2020-05-22T22:16:45","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=676"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Auswahlfelder_im_Ribbon","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/","title":{"rendered":"Auswahlfelder im Ribbon"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/6ca3a1fc1f174d9b8d6f7e5b4255be43\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Das mit Access 2007 neu eingef&uuml;hrte Ribbon kommt mit einer Menge interessanter Steuerelemente. Zur Auswahl von Daten gibt es gleich mehrere Kandidaten, von denen wir uns diejenigen ansehen, die sich dynamisch etwa mit den Daten aus Tabellen f&uuml;llen lassen: Zwei verschiedene Kombinationsfelder und zus&auml;tzlich auch noch ein dynamisch zu f&uuml;llendes Men&uuml;, das sich prima f&uuml;r die Datenauswahl zweckentfremden l&auml;sst. Dieser Beitrag zeigt, wie Sie Daten aus Tabellen und sonstigen Quellen in diese Steuerelemente f&uuml;llen und sie zur Anwendungssteuerung benutzen k&ouml;nnen.<\/b><\/p>\n<p>Die Vision hinter dem Ribbon und seinen M&ouml;glichkeiten ist eindeutig: Durch die viel gr&ouml;&szlig;ere Zahl verschiedener Steuerelemente und die flexibleren gestalterischen M&ouml;glichkeiten erlaubt Access dem Benutzer das Auslagern wesentlicher Funktionen der Entwicklungsoberfl&auml;che in das Ribbon.<\/p>\n<p>Neben dem &uuml;blichen Aufruf von Formularen, Berichten oder Funktionen &uuml;ber einfache Schaltfl&auml;chen, wie sie in den Men&uuml;- und Symbolleisten &auml;lterer Access-Versionen g&auml;ngig waren, k&ouml;nnen Sie nun viel einfacher weitere Funktionen auf das Ribbon &uuml;bertragen. An welchen Stellen macht dies Sinn Zum Beispiel dort, wo der Benutzer nicht nur einfache Formulare zur Anzeige von Daten &ouml;ffnet, sondern zuvor noch die gew&uuml;nschten Daten ausw&auml;hlen muss. Dies geschieht in der Regel in folgenden Schritten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">&Ouml;ffnen eines Auswahlformulars, das beispielsweise eine Liste der Daten zur Auswahl bereitstellt<\/li>\n<li class=\"aufz-hlung\">Auswahl des gew&uuml;nschten Eintrags etwa per Doppelklick auf einen Listeneintrag<\/li>\n<li class=\"aufz-hlung\">Anzeige des Eintrags im Detailformular<\/li>\n<\/ul>\n<p>Alternativ enth&auml;lt das Detailformular gleich ein Steuerelement zur Auswahl des gew&uuml;nschten Datensatzes &#8211; beispielsweise ein Kombinationsfeld. Normalerweise wird hier aber immer direkt beim &Ouml;ffnen irgendein Datensatz angezeigt, zum Beispiel das erste Element der Datenherkunft. <\/p>\n<p>Das ist genau der richtige Einstiegspunkt f&uuml;r die drei Ribbon-Elemente, die in diesem Beitrag genauer beleuchtet werden. Es geht um die Elemente zur Darstellung von Listen, und hier speziell um solche, die dynamisch mit Daten gef&uuml;llt werden k&ouml;nnen. Davon gibt es insgesamt vier &#8211; das <b>gallery<\/b>-Element schauen wir uns aber noch einmal in einem sp&auml;teren Beitrag an:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>comboBox<\/b><\/li>\n<li class=\"aufz-hlung\"><b>dropDown<\/b> <\/li>\n<li class=\"aufz-hlung\"><b>dynamicMenu<\/b><\/li>\n<\/ul>\n<p><b>Rahmenwerk<\/b><\/p>\n<p>Um Platz zu sparen, finden Sie in Listing 1, das ein Beispiel f&uuml;r ein statisches <b>comboBox<\/b>-Element zeigt, letztmalig f&uuml;r diesen Beitrag die Ribbon-Elemente, die f&uuml;r den Aufbau des <b>tab<\/b>-Elements und der <b>group<\/b>-Elemente verantwortlich sind &#8211; wir haben diese fett gedruckt, um die betroffenen Elemente hervorzuheben. Einige Erl&auml;uterungen zu diesen Basiselementen:<\/p>\n<p class=\"kastentabelleheader\">Listing 1: Beispiel f&uuml;r ein statisches comboBox-Steuerelement<\/p>\n<pre>&lt;customUI xmlns=&quot;http:\/\/schemas.microsoft.com\/office\/2006\/01\/customui&quot; onLoad=&quot;OnLoad_Beispiel&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;tab0&quot; label=&quot;Beispiele f&uuml;r Kombinations- und Auswahlfelder&quot;&gt;\r\n&lt;group id=&quot;grpSamplesComboBox&quot; label=&quot;Beispiele ComboBox&quot;&gt;\r\n&lt;comboBox id=&quot;cboStatic&quot; label=&quot;ComboBox statisch&quot;&gt;\r\n&lt;item id=&quot;item1&quot; image=&quot;chart_area.png&quot; label=&quot;Eintrag 1&quot;\/&gt;\r\n&lt;item id=&quot;item2&quot; image=&quot;printer.png&quot; label=&quot;Eintrag 2&quot;\/&gt;\r\n&lt;\/comboBox&gt;\r\n&lt;\/group&gt;\r\n&lt;group id=&quot;grpSampleDropDown&quot; label=&quot;Beispiele DropDown&quot;\/&gt;\r\n&lt;group id=&quot;grpSampleDynamicMenu&quot; label=&quot;Beispiel DynamicMenu&quot;\/&gt;\r\n&lt;\/tab&gt;\r\n&lt;\/tabs&gt;\r\n&lt;\/ribbon&gt;\r\n&lt;\/customUI&gt;<\/pre>\n<ul>\n<li class=\"aufz-hlung\">Die <b>onLoad<\/b>-Callback-Funktion <b>OnLoad_Beispiel <\/b>sorgt daf&uuml;r, dass ein Verweis auf das Ribbon in einer Variablen namens <b>objRibbon_Beispiel <\/b>gespeichert wird und f&uuml;r sp&auml;tere Zugriffe bereitsteht.<\/li>\n<li class=\"aufz-hlung\">Die <b>loadImage<\/b>-Callback-Funktion <b>loadImage <\/b>sorgt daf&uuml;r, dass alle f&uuml;r die einzelnen Steuerelemente definierten Bilder aus einer Tabelle namens <b>USysImages <\/b>eingelesen und im Ribbon angezeigt werden. Die &uuml;brigen daf&uuml;r notwendigen Funktionen finden Sie im Standardmodul <b>mdlRibbonImages<\/b>. Zum Verst&auml;ndnis dieses Beitrags sind die dort enthaltenen Routinen nicht relevant. Detaillierte Informationen zu Bildern im Ribbon finden Sie in einem sp&auml;teren Beitrag.<\/li>\n<li class=\"aufz-hlung\">Das Attribut <b>startFromScratch <\/b>sorgt mit dem Wert <b>true <\/b>daf&uuml;r, dass nur die in unserer Definition enthaltenen Elemente angezeigt und die eingebauten Elemente ausgeblendet werden.<\/li>\n<\/ul>\n<p>Grundlagen zu den oben genannten Elementen finden Sie unter anderem im Beitrag <b>Dynamische Ribbons<\/b> (Shortlink 657).<\/p>\n<p><b>Das comboBox-Element<\/b><\/p>\n<p>Das <b>comboBox<\/b>-Element zeigt eine Liste von Elementen an. Gleich in Bild 1 sehen Sie ein Feature, das es vom Access-Kombinationsfeld abhebt: Es kann n&auml;mlich pro Eintrag ein Icon anzeigen. Der Code f&uuml;r dieses einfache <b>comboBox<\/b>-Element sieht wie in Listing 1 aus. Schauen wir uns die Definition dieses Elements genauer an: Wenn Sie es statisch definieren, also nicht mit den Daten aus einer Tabelle f&uuml;llen m&ouml;chten, k&ouml;nnen Sie die einzelnen Eintr&auml;ge mit dem <b>item<\/b>-Element anlegen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_04\/RibbonKombis-web-images\/pic001_opt.jpeg\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Ein einfaches statisches comboBox-Element<\/span><\/b><\/p>\n<p><b>Inhalt der comboBox auswerten<\/b><\/p>\n<p>Damit Sie den Inhalt des <b>comboBox<\/b>-Elements nach der Auswahl auswerten k&ouml;nnen, m&uuml;ssen Sie f&uuml;r das Attribut <b>onChange <\/b>eine Callback-Funktion festlegen und diese in einem Standardmodul, in unserem Beispiel <b>mdlRibbon<\/b>, definieren.<\/p>\n<p>Die erste Zeile des <b>comboBox<\/b>-Elements sieht dann so aus:<\/p>\n<pre>&lt;comboBox id=&quot;cboStatic&quot; label=&quot;ComboBox statisch&quot; onChange=&quot;onChange&quot;&gt;<\/pre>\n<p>Die folgende Callback-Funktion gibt den Namen des ausl&ouml;senden Steuerelements sowie den Inhalt der <b>comboBox <\/b>aus:<\/p>\n<pre>Sub onChange(control As IRibbonControl, _\r\n    text As String)\r\n    MsgBox &quot;Steuerelement: &quot; &amp; control.ID _\r\n    &amp; vbCrLf &amp; &quot;text: &quot; &amp; text\r\n    End Sub<\/pre>\n<p><b>comboBox dynamisch f&uuml;llen<\/b><\/p>\n<p>Schauen wir uns gleich an, wie wir statt der beiden statischen Eintr&auml;ge einige Datens&auml;tze einer Datenbanktabelle im <b>comboBox<\/b>-Element unterbringen. Die Beispieldatenbank enth&auml;lt eine Tabelle namens <b>tblAdressen<\/b>, die ein paar Daten zum Experimentieren liefert. Das <b>comboBox<\/b>-Element soll schlicht die Nachnamen aus dieser Tabelle anzeigen. Dazu sind mindestens zwei Callback-Funktionen n&ouml;tig, und zwar <b>getItemLabel <\/b>und <b>getItemCount<\/b>. Die Definition eines solchen Elements sieht so aus:<\/p>\n<pre>&lt;comboBox id=&quot;cboDynamic&quot;\r\nlabel=&quot;comboBox dynamisch&quot;\r\ngetItemCount=&quot;getItemCount&quot;\r\ngetItemLabel=&quot;getItemLabel&quot;\r\nonChange=&quot;onChange&quot;\/&gt;<\/pre>\n<p>Die Callback-Funktion <b>getItemCount <\/b>wird einmal beim Initialisieren des <b>comboBox<\/b>-Elements aufgerufen, die Callback-Funktion <b>getItemLabel <\/b>entsprechend der Anzahl, die Sie mit dem Parameter <b>count <\/b>der Callback-Funktion <b>getItemCount <\/b>zur&uuml;ckgeben. Die Hauptarbeit erledigt dabei die Routine <b>getItemCount<\/b>. Sie speichert die anzuzeigenden Daten in einem Array, das Sie im Kopf des Moduls wie folgt deklarieren:<\/p>\n<pre>Dim strAdressen() As String<\/pre>\n<p>Die Routine <b>getItemCount <\/b>liefert mit dem Parameter <b>control <\/b>einen Verweis auf das aufrufende Steuerelement. Diesen m&uuml;ssen Sie auswerten, wenn mehrere Steuerelemente die Funktion <b>getItemCount <\/b>aufrufen und Sie diesen Steuerelementen unterschiedliche Daten zur&uuml;ckliefern m&ouml;chten. Das Prinzip zeigen wir gleich in einer anderen Callback-Funktion.<\/p>\n<p>Die einfache Variante von <b>getItemCount <\/b>geht davon aus, dass alle Aufrufe von unserem Steuerelement mit dem Wert <b>cboDynamic <\/b>f&uuml;r das Attribut <b>id <\/b>kommen. Sie deklariert ein <b>Database<\/b>&#8211; und ein <b>Recordset<\/b>-Objekt, die anschlie&szlig;end instanziert und als Quelle f&uuml;r die anzuzeigenden Daten herhalten werden.<\/p>\n<p>Beim Durchlaufen der Datens&auml;tze passiert Dreierlei: Das Array <b>strAdressen <\/b>wird jeweils um ein Feld erweitert, dieses wird mit dem Nachnamen des aktuellen Datensatzes gef&uuml;llt und schlie&szlig;lich wird die Z&auml;hlervariable <b>i<\/b>, die in beiden F&auml;llen als Index dient, um eins erh&ouml;ht. Nach dem Durchlaufen aller Datens&auml;tze enth&auml;lt die Z&auml;hlervariable gleichzeitig die Anzahl der anzuzeigenden Elemente, weshalb die Funktion diesen Wert dem Parameter <b>count <\/b>zuweisen und dem Ribbon &uuml;bergeben kann.<\/p>\n<pre>Sub getItemCount(control As IRibbonControl, _\r\n    ByRef count)\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Dim i As Integer\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(&quot;SELECT Nachname\r\n    FROM tblAdressen&quot;, dbOpenDynaset)\r\n    Do While Not rst.EOF\r\n        ReDim Preserve strAdressen(i + 1) As _\r\n        String\r\n        strAdressen(i) = rst!Nachname\r\n        i = i + 1\r\n        rst.MoveNext\r\n    Loop\r\n    count = i\r\n    End Sub<\/pre>\n<p>Die Anzahl der Aufrufe der zweiten Callback-Funktion namens <b>getItemLabel <\/b>entspricht genau diesem Wert. Die Funktion erh&auml;lt neben dem obligatorischen Verweis auf das Steuerelement (<b>control<\/b>) noch einen Wert f&uuml;r den Parameter <b>index<\/b>, der beim ersten Aufruf eins betr&auml;gt und sich dann mit jedem Aufruf um eins erh&ouml;ht. Das ist praktisch, denn so lassen sich leicht die anzuzeigenden Daten aus dem Array <b>strAdresssen <\/b>auslesen und dem R&uuml;ckgabewert <b>label <\/b>zuweisen.<\/p>\n<pre>Sub getItemLabel(control As IRibbonControl, _\r\n    index As Integer, ByRef label)\r\n    label = strAdressen(index)\r\n    End Sub<\/pre>\n<p>Das Ribbon sieht dann mit der Tabelle aus Bild 2 als Ausgangsmaterial wie in Bild 3 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_04\/RibbonKombis-web-images\/pic002_opt.jpeg\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Datenherkunft f&uuml;r die Beispiele dieses Beitrags<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_04\/RibbonKombis-web-images\/pic003_opt.jpeg\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Beispiel f&uuml;r eine comboBox, die mit Daten aus einer Tabelle gef&uuml;llt wurde<\/span><\/b><\/p>\n<p><b>Werte aus dem comboBox-Element auslesen<\/b><\/p>\n<p>Das sch&ouml;nste Steuerelement hilft nicht weiter, wenn man nicht per Code auf Benutzereingaben reagieren kann. Wer die Arbeit mit dem Access-Kombinationsfeld gewohnt ist, wird nicht gerade mit Begeisterung auf die beschr&auml;nkten M&ouml;glichkeiten des <b>comboBox<\/b>-Steuerelements reagieren: Es bietet zwar eine Callback-Funktion, die ausgel&ouml;st wird, wenn der Benutzer einen Eintrag ausw&auml;hlt, aber dieser liefert als Parameter lediglich den in der <b>comboBox <\/b>angezeigten Text. <\/p>\n<p><!--30percent--><\/p>\n<p>Diesen werten Sie beispielsweise mit dieser Routine aus, wobei die f&uuml;r dieses Steuerelement relevanten Zeilen fett gedruckt sind (die &uuml;brigen zeigen, wie Sie unbehandelte Aufrufe anderer Steuerelemente erkennen und behandeln k&ouml;nnen):<\/p>\n<pre>Sub onChange(control As IRibbonControl, _\r\n    text As String)\r\n    Select Case control.id\r\n    Case &quot;cboDynamic&quot;\r\n    MsgBox text\r\n    Case Else\r\n    MsgBox &quot;Steuerelement: &quot; _\r\n    &amp; control.id &amp; vbCrLf _\r\n    &amp; &quot;text: &quot; &amp; text\r\n    End Select\r\n    End Sub<\/pre>\n<p>Normalerweise m&ouml;chte man an dieser Stelle etwas mit den ausgew&auml;hlten Daten tun, also etwa den gew&uuml;nschten Datensatz in einem Formular anzeigen. Dazu braucht man, um auf Nummer sicher zugehen, die <b>ID <\/b>des entsprechenden Datensatzes.<\/p>\n<p>Wenn die im <b>comboBox <\/b>angezeigten Texte eindeutig sind, ist dies kein Problem &#8211; Sie m&uuml;ssen einfach nur die <b>ID <\/b>mit einer entsprechenden <b>DLookup<\/b>-Anweisung ermitteln und k&ouml;nnen dann damit weiterarbeiten. Unn&ouml;tig ist dieser zus&auml;tzliche Schritt dennoch &#8211; und problematisch wird es zudem, wenn die Eintr&auml;ge der <b>comboBox <\/b>nicht eindeutig sind.<\/p>\n<p><b>Aktualisieren des comboBox-Elements<\/b><\/p>\n<p>Ein Vorteil des <b>comboBox<\/b>-Elements ist sicher die Eigenschaft <b>invalidateContentOnDrop<\/b>. Stellen Sie diese auf <b>true <\/b>ein, liest <b>comboBox <\/b>die anzuzeigenden Daten bei jedem Aufklappen neu ein. Gerade bei Daten, die sich oft &auml;ndern und deren Menge &uuml;berschaubar ist, macht diese Einstellung Sinn. Wenn Sie den Zeitpunkt der Aktualisierung selbst steuern m&ouml;chten, verwenden Sie die <b>Invalidate<\/b>&#8211; oder die <b>InvalidateControl<\/b>-Methode. Mehr dazu erfahren Sie weiter unten unter Aktualisieren des <b>dropDown<\/b>-Elements; die Vorgehensweise ist bei beiden Steuerelementen gleich.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Texteingabe im comboBox-Element<\/p>\n<p>Im Gegensatz zum gleich beschriebenen <b>dropDown<\/b>-Element kann der Benutzer nicht nur die Eintr&auml;ge des <b>comboBox<\/b>-Elements ausw&auml;hlen, sondern auch eigene Texte eingeben. Die anschlie&szlig;ende Bet&auml;tigung der Eingabetaste f&uuml;hrt zum Ausl&ouml;sen der <b>onChange<\/b>-Callback-Funktion, die im Parameter <b>text <\/b>den neu eingegebenen Wert liefert.<\/p>\n<p><b>Eintrag im comboBox-Element ausw&auml;hlen<\/b><\/p>\n<p>Sie k&ouml;nnen im <b>comboBox<\/b>-Element keinen Eintrag in dem Sinne vorausw&auml;hlen, wie es etwa im Access-Kombinationsfeld m&ouml;glich ist. Stattdessen erlaubt die Callback-Funktion <b>getText <\/b>die &Uuml;bergabe eines Textes, der beim Anzeigen des <b>comboBox<\/b>-Elements in diesem erscheint. Das Attribut f&uuml;gen Sie wie folgt ein:<\/p>\n<pre>&lt;comboBox id=&quot;cboDynamic&quot;\r\nlabel=&quot;comboBox dynamisch&quot;\r\n...\r\ngetText=&quot;getText&quot;\/&gt;<\/pre>\n<p>Die Callback-Routine liefert schlie&szlig;lich den gew&uuml;nschten Ausdruck zur&uuml;ck &#8211; hier der Wert des Feldes <b>Nachname <\/b>des ersten Datensatzes der Tabelle <b>tblAdressen<\/b>:<\/p>\n<pre>Sub getText(control As IRibbonControl, _\r\n    ByRef text)\r\n    text = DLookup(&quot;Nachname&quot;, &quot;tblAdressen&quot;)\r\n    End Sub<\/pre>\n<p><b>Das dropDown-Element<\/b><\/p>\n<p>Schauen wir uns nun an, was das andere Ribbon-Steuerelement mit Kombinationsfeld-Charakter, das <b>dropDown<\/b>-Element, besser oder weniger gut kann als das <b>comboBox<\/b>-Element.<\/p>\n<p>Bei einem statischen Beispielexemplar f&auml;llt zun&auml;chst einmal auf, dass man dem <b>dropDown<\/b>-Element nicht nur <b>item<\/b>-Elemente, sondern auch <b>button<\/b>-Elemente unterordnen kann. Die folgende Definition ergibt beispielsweise das <b>dropDown<\/b>-Element aus Bild 4 (in diesem Fall kommen eingebaute Ribbon-Icons zum Einsatz, bei denen Sie einfach nur die <b>imageMso <\/b>angeben m&uuml;ssen):<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_04\/RibbonKombis-web-images\/pic004_opt.jpeg\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Beispiel f&uuml;r ein statisches dropDown-Element mit zus&auml;tzlicher Schaltfl&auml;che<\/span><\/b><\/p>\n<pre>&lt;dropDown id=&quot;drpStatic&quot; label=&quot;dropDown\r\nstatisch&quot;&gt;\r\n&lt;item id=&quot;itm1&quot;\r\nimageMso=&quot;_3DExtrusionDepth72Classic&quot;\r\nlabel=&quot;Eintrag 1&quot;\/&gt;\r\n&lt;item id=&quot;itm2&quot;\r\nimageMso=&quot;_3DSurfaceMetalClassic&quot;\r\nlabel=&quot;Eintrag 2&quot;\/&gt;\r\n&lt;button id=&quot;btn1&quot;\r\nimageMso=&quot;_3DLightingClassic&quot;\r\nlabel=&quot;Button 1&quot;\/&gt;\r\n&lt;\/dropDown&gt;<\/pre>\n<p><b>dropDown-Element dynamisch f&uuml;llen<\/b><\/p>\n<p>Das F&uuml;llen eines <b>dropDown<\/b>-Elements geschieht fast auf die gleiche Weise wie beim <b>comboBox<\/b>-Element. Der Unterschied ist, dass Sie hier zus&auml;tzlich noch eine <b>ID <\/b>pro Eintrag festlegen k&ouml;nnen &#8211; also genau das, was wir tabellenorientiert denkenden Entwickler brauchen. In der Ribbon-Definition sieht dies so aus, wobei zus&auml;tzlich zur Definition des <b>comboBox<\/b>-Pendants noch eine Callback-Funktion f&uuml;r <b>getItemID <\/b>und als Ersatz f&uuml;r das fehlende <b>onChange<\/b>-Attribut das <b>onAction<\/b>-Attribut eingesetzt wurde:<\/p>\n<pre>&lt;dropDown id=&quot;drpDynamic&quot;\r\nlabel=&quot;dropDown dynamisch&quot;\r\nonAction=&quot;onAction_dropDown&quot;\r\ngetItemCount=&quot;getItemCount&quot;\r\ngetItemLabel=&quot;getItemLabel&quot;\r\ngetItemID=&quot;getItemID&quot;\/&gt;<\/pre>\n<p>Im VBA-Modul legen wir wiederum ein String-Array fest:<\/p>\n<pre>Dim strAdressenDropDown() As String<\/pre>\n<p>Das Z&auml;hlen der Datens&auml;tze und das F&uuml;llen des Arrays erfolgt wie bereits weiter oben beschrieben. Allerdings enth&auml;lt die Datensatzgruppe neben dem Nachnamen des Eintrags auch noch den Inhalt des Prim&auml;rschl&uuml;sselfelds <b>AdresseID<\/b>.<\/p>\n<p>Das String-Array wird &uuml;ber die <b>ReDim<\/b>-Anweisung zweidimensional gestaltet, wobei die eine Dimension die Spalten (hier <b>AdresseID <\/b>und <b>Nachname<\/b>) und die andere die Datens&auml;tze aufnimmt.<\/p>\n<pre>Sub getItemCount(control As IRibbonControl, _\r\n    ByRef count)\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Dim i As Integer\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(&quot;SELECT\r\n    AdresseID, Nachname FROM tblAdressen&quot;, _\r\n    dbOpenDynaset)\r\n    Do While Not rst.EOF\r\n        ReDim Preserve strAdressenDropDown(2, _\r\n        i + 1) As String\r\n        strAdressenDropDown(1, i) = rst!AdresseID\r\n        strAdressenDropDown(2, i) = rst!Nachname\r\n        i = i + 1\r\n        rst.MoveNext\r\n    Loop\r\n    count = i\r\n    End Sub<\/pre>\n<p>Das Einlesen der Beschriftung des Eintrags unterscheidet sich vom <b>comboBox<\/b>-Element dadurch, dass hier Informationen aus dem zweidimensionalen Array eingelesen werden, wobei hier die Werte aus der zweiten Spalte an die Reihe kommen:<\/p>\n<pre>Sub getItemLabel(control As IRibbonControl, index As Integer, ByRef label)\r\n    label = strAdressenDropDown(2, index)\r\n    End Sub<\/pre>\n<p>Neu im Vergleich zum <b>comboBox<\/b>-Element ist beim <b>dropDown<\/b>-Element die Routine <b>getItemID<\/b>, welche die <b>ID <\/b>aus der ersten Spalte der Elemente unseres Arrays ausliest und mit dem Parameter <b>id <\/b>an das Ribbon &uuml;bergibt:<\/p>\n<pre>Sub getItemID(control As IRibbonControl, _\r\n    index As Integer, ByRef id)\r\n    id = strAdressenDropDown(1, index)\r\n    End Sub<\/pre>\n<p><b>Gew&auml;hlten Eintrag im dropDown-Element auslesen<\/b><\/p>\n<p>Ein Klick auf einen der <b>dropDown<\/b>-Eintr&auml;ge l&ouml;st die Callback-Funktion <b>onAction <\/b>aus. Diese nennen wir in diesem Fall <b>onAction_dropDown<\/b>, weil sie sich durch die Anzahl der Parameter von der <b>onAction<\/b>-Funktion etwa von <b>button<\/b>-Elementen unterscheidet.<\/p>\n<p>Die folgende Beispielroutine zeigt einfach ein Meldungsfenster mit den Inhalten der beiden Parameter <b>selectedID <\/b>und <b>selectedIndex <\/b>an.<\/p>\n<pre>Sub onAction_dropDown(control As _\r\n    IRibbonControl, selectedId As String, _\r\n    selectedIndex As Integer)\r\n    MsgBox &quot;selectedID: &quot; &amp; selectedId &amp; vbCrLf _\r\n    &amp; &quot;selectedIndex: &quot; &amp; selectedIndex _\r\n    &amp; vbCrLf\r\n    End Sub<\/pre>\n<p>Der aus <b>selectedID <\/b>gewonnene Wert entspricht genau dem Wert des Prim&auml;rschl&uuml;sselfeldes des ausgew&auml;hlten Datensatzes.<\/p>\n<p><b>Aktualisieren des dropDown-Elements<\/b><\/p>\n<p>Wenn sich die in der Datenherkunft befindlichen Daten &auml;ndern, sollen diese &auml;nderungen sich auch in den durch das <b>dropDown<\/b>-Steuerelement angezeigten Daten niederschlagen. Im Gegensatz zum <b>comboBox<\/b>-Element bietet das <b>dropDown<\/b>-Element keine Eigenschaft namens <b>invalidateContentOnDrop<\/b>, welche die Daten automatisch beim Aufklappen des Steuerelements neu einliest. Die einzige Alternative ist eine Vorgehensweise, die auch beim <b>comboBox<\/b>-Steuerelement funktioniert. Dazu m&uuml;ssen Sie im <b>onLoad<\/b>-Callback eine entsprechende Variable des Typs <b>IRibbonUI <\/b>mit einem Verweis auf das Ribbon f&uuml;llen. Diese deklarieren Sie wie folgt:<\/p>\n<pre>Dim objRibbon_Beispiel As IRibbonUI<\/pre>\n<p>Den n&ouml;tigen Einzeiler beim Erzeugen des Ribbons f&uuml;hrt diese Callback-Funktion aus:<\/p>\n<pre>Sub onLoad_Beispiel(ribbon As IRibbonUI)\r\n    Set objRibbon_Beispiel = ribbon\r\n    End Sub<\/pre>\n<p>Das <b>IRibbonUI<\/b>-Objekt stellt zwei Methoden zur Verf&uuml;gung, mit denen Sie die <b>get&#8230;<\/b>-Callback-Funktionen aller Steuerelemente (<b>Invalidate<\/b>) oder nur die eines speziellen Steuerelements (<b>InvalidateControl<\/b>) erneut aufrufen k&ouml;nnen. Wenn Sie nun den Inhalt der Tabelle <b>tblAdressen <\/b>ge&auml;ndert haben und das <b>dropDown<\/b>-Element diese &auml;nderungen beim n&auml;chsten Ausklappen ber&uuml;cksichtigen soll, m&uuml;ssen Sie etwa die folgende Anweisung aufrufen:<\/p>\n<pre>objRibbon_Beispiel.Invalidate<\/pre>\n<p>Diese sorgt f&uuml;r das erneute Aufrufen der <b>get&#8230;<\/b>-Callbacks aller Steuerelemente der angegebenen Ribbon-Definition. Wenn Sie das <b>dropDown<\/b>-Element gezielt ansprechen m&ouml;chten, verwenden Sie diesen Aufruf:<\/p>\n<pre>objRibbon_Beispiel.InvalidateControl &quot;drpDynamic&quot;<\/pre>\n<p><b>Eintrag in dropDown-Element per Code festlegen<\/b><\/p>\n<p>Im Gegensatz zum <b>comboBox<\/b>-Element, f&uuml;r das Sie prinzipiell nur einen Text voreinstellen, aber keinen der vorhandenen Eintr&auml;ge ausw&auml;hlen k&ouml;nnen, erlaubt Ihnen das <b>dropDown<\/b>-Element, einen der vorhandenen Eintr&auml;ge per VBA, beziehungsweise &uuml;ber die entsprechende Callback-Funktion ausw&auml;hlen zu lassen. Das Callback-Attribut hei&szlig;t <b>getSelectedItemID <\/b>und wird in der Ribbon-Definition so angegeben:<\/p>\n<pre>getSelectedItemID=&quot;getSelectedItemID&quot;<\/pre>\n<p>In der Callback-Funktion wird einfach nur die erste <b>ID <\/b>der Datenherkunft angegeben:<\/p>\n<pre>Sub getSelectedItemID(control As _\r\n    IRibbonControl, ByRef index)\r\n    index = DLookup(&quot;AdresseID&quot;, &quot;tblAdressen&quot;)\r\n    End Sub<\/pre>\n<p>Es gibt noch eine zweite M&ouml;glichkeit, einen Eintrag auszuw&auml;hlen. Diese bezieht sich nicht auf den in der <b>ID <\/b>des Eintrags gespeicherten Wert, sondern auf den Index, also den Reihenfolge-Wert des Eintrags. Das Callback-Attribut hei&szlig;t <b>getSelectedItemIndex<\/b> und eine Routine, die jeweils den ersten Eintrag markiert, k&ouml;nnte so aussehen:<\/p>\n<pre>Sub getSelectedItemIndex(control As _\r\n    IRibbonControl, ByRef index)\r\n    index = 0\r\n    End Sub<\/pre>\n<p>Beachten Sie, dass Sie nur eines der beiden Attribute <b>getSelectedItemID <\/b>oder <b>getSelectedItemIndex <\/b>verwenden k&ouml;nnen.<\/p>\n<p><b>Weitere Eigenschaften von dropDown- und comboBox-Elementen<\/b><\/p>\n<p>Nachfolgend finden Sie noch weitere Eigenschaften der beiden Kombinationsfeld-Varianten. Das <b>sizeString<\/b>-Attribut legt fest, wie breit ein <b>comboBox<\/b>&#8211; oder ein <b>dropDown<\/b>-Steuerelement sein soll. Interessanterweise gibt man hier nicht, wie sonst &uuml;blich, eine Zahl ein, um die Breite in der Standardeinheit festzulegen, sondern eine Zeichenkette. Das Kombinationsfeld wird dann exakt so breit ausgelegt, dass der Text genau hineinpasst:<\/p>\n<pre>&lt;dropDown id=&quot;drpDynamic&quot;\r\nlabel=&quot;dropDown dynamisch&quot;\r\n...\r\nsizeString=&quot;So breit bin ich!&quot; \/&gt;<\/pre>\n<p>Dem <b>comboBox<\/b>-Element vorbehalten ist das Attribut <b>maxLength<\/b>. Es erwartet einen numerischen Wert, der festlegt, wie viele Zeichen die Eingabe umfassen darf. Die &uuml;brigen Attribute sind f&uuml;r die reine Anzeige von Daten nicht relevant und sollen daher an dieser Stelle nicht weiter besprochen werden.<\/p>\n<p><b>Das dynamicMenu-Element<\/b><\/p>\n<p>Stattdessen k&uuml;mmern wir uns noch um das dritte Element, mit dem Sie zur Laufzeit Tabelleninhalte anzeigen k&ouml;nnen.<\/p>\n<p>Dieses Element entpricht bez&uuml;glich seiner M&ouml;glichkeiten dem <b>menu<\/b>-Element: Sie k&ouml;nnen also beispielsweise <b>button<\/b>-Elemente oder auch weitere <b>menu<\/b>-Elemente einf&uuml;gen (siehe Bild 5). Das Exemplar aus der Abbildung wird etwa so definiert:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_04\/RibbonKombis-web-images\/pic005_opt.jpeg\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Ein statisches Men&uuml; (menu-Element)<\/span><\/b><\/p>\n<pre>&lt;menu id=&quot;mnu&quot; label=&quot;Statisches Men&uuml;&quot;&gt;\r\n&lt;button id=&quot;btnMnu1&quot; label=&quot;Schaltfl&auml;che 1&quot;\/&gt;\r\n&lt;button id=&quot;btnMnu2&quot; label=&quot;Schaltfl&auml;che 2&quot;\/&gt;\r\n&lt;menu id=&quot;mnu1&quot; label=&quot;Untermen&uuml;&quot;&gt;\r\n&lt;button id=&quot;btn3&quot; label=&quot;Schaltfl&auml;che 3&quot;\/&gt;\r\n&lt;button id=&quot;btn4&quot; label=&quot;Schaltfl&auml;che 4&quot;\/&gt;\r\n&lt;\/menu&gt;\r\n&lt;\/menu&gt;<\/pre>\n<p>Eigentlich w&auml;re der Aufbau dieses XML-Ausdrucks eher uninteressant, w&uuml;rde er nicht die Basis f&uuml;r dynamische Men&uuml;s liefern. Das alternative <b>dynamicMenu<\/b>-Element erwartet n&auml;mlich als R&uuml;ckgabewert seiner Callback-Funktion <b>getContent <\/b>genau einen solchen XML-Ausdruck. Das grobe Ger&uuml;st dieses Elements sieht so aus:<\/p>\n<pre>&lt;dynamicMenu id=&quot;dnm&quot;\r\nlabel=&quot;Dynamisches Men&uuml;&quot;\r\ngetContent=&quot;getContent&quot;\/&gt;<\/pre>\n<p>Wenn die <b>getContent<\/b>-Callback-Funktion zwar vorhanden ist, aber mit dem Parameter <b>content <\/b>keinen Wert zur&uuml;ckliefert, erzeugt dies ein leeres Men&uuml; wie in Bild 6:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_04\/RibbonKombis-web-images\/pic006_opt.jpeg\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Ein leeres dynamisches Men&uuml;<\/span><\/b><\/p>\n<pre>Sub getContent(control As IRibbonControl, _\r\n    ByRef content)\r\n    End Sub<\/pre>\n<p>Der mit dem Parameter <b>content <\/b>an das Ribbon &uuml;bergebene Ausdruck sieht ein klein wenig anders aus als der f&uuml;r ein herk&ouml;mmliches <b>menu<\/b>-Element &#8211; aber auch nur in der ersten Zeile. Diese enth&auml;lt n&auml;mlich nicht die &uuml;blichen <b>id<\/b>&#8211; und <b>label<\/b>-Tags, sondern sieht so aus:<\/p>\n<pre>&lt;menu xmlns=&quot;http:\/\/schemas.microsoft.com\/\r\noffice\/2006\/01\/customui&quot;&gt;<\/pre>\n<p>Den Rest stellen Sie auf beliebige Art und Weise zusammen. Die einfachste Variante ist die Quick&#8220;n&#8220;Dirty-Stringverkn&uuml;pfung wie in der Routine aus Listing 2.<\/p>\n<p class=\"kastentabelleheader\">Listing 2: Dynamisches Zusammensetzen eines statischen Men&uuml;-Elements<\/p>\n<pre>Sub getContent(control As IRibbonControl, ByRef content)\r\n    Dim str As String\r\n    str = &quot;&lt;menu xmlns=&quot;&quot;http:\/\/schemas.microsoft.com\/office\/2006\/01\/customui&quot;&quot;&gt;&quot;\r\n    str = str &amp; &quot;&lt;button id=&quot;&quot;btnMnu1&quot;&quot; label=&quot;&quot;Schaltfl&auml;che 1&quot;&quot;\/&gt;&quot;\r\n    str = str &amp; &quot;&lt;button id=&quot;&quot;btnMnu2&quot;&quot; label=&quot;&quot;Schaltfl&auml;che 2&quot;&quot;\/&gt;&quot;\r\n    str = str &amp; &quot;&lt;menu id=&quot;&quot;mnu1&quot;&quot; label=&quot;&quot;Untermen&uuml;&quot;&quot;&gt;&quot;\r\n    str = str &amp; &quot;&lt;button id=&quot;&quot;btn3&quot;&quot; label=&quot;&quot;Schaltfl&auml;che 3&quot;&quot;\/&gt;&quot;\r\n    str = str &amp; &quot;&lt;button id=&quot;&quot;btn4&quot;&quot; label=&quot;&quot;Schaltfl&auml;che 4&quot;&quot;\/&gt;&quot;\r\n    str = str &amp; &quot;&lt;\/menu&gt;&quot;\r\n    str = str &amp; &quot;&lt;\/menu&gt;&quot;\r\n    content = str\r\n    End Sub<\/pre>\n<p>Diese Routine erzeugt exakt das Men&uuml;, das schon das statische <b>menu<\/b>-Element aus Bild 5 anzeigt.<\/p>\n<p>Nun wollen wir aber kein statisches Men&uuml; mit einem <b>dynamicMenu<\/b>-Element nachbauen, sondern dieses mit den Daten aus einer Tabelle f&uuml;llen. Dabei sind zwei Faktoren wichtig: Erstens sollen die anzuzeigenden Daten im Attribut <b>label <\/b>der unterhalb des Men&uuml;s angelegten <b>button<\/b>-Elemente landen und der Wert f&uuml;r das <b>id<\/b>-Attribut muss jeweils eindeutig sein und rekrutiert sich deshalb aus der <b>AdresseID <\/b>des jeweiligen Datensatzes (s. Listing 3). Fehlt nur noch eine winzige Kleinigkeit: Es passiert leider noch &uuml;berhaupt nichts, wenn Sie einen der Men&uuml;eintr&auml;ge per Mausklick ausw&auml;hlen. Das <b>dynamicMenu<\/b>-Element bietet keine eigene Callback-Funktion f&uuml;r diesen Zweck, was aber auch logisch ist: Immerhin liefern die darunter angeordneten <b>button<\/b>-Elemente ja jedes sein eigenes <b>onAction<\/b>-Attribut. Passen wir also die Anweisung an, welche die einzelnen <b>button<\/b>-Elemente zur XML-Definition hinzuf&uuml;gt &#8211; die &auml;nderungen sind fett gedruckt (in einer Zeile):<\/p>\n<p class=\"kastentabelleheader\">Listing 3: Echte Dynamik im dynamicMenu-Element<\/p>\n<pre>Sub getContent(control As IRibbonControl,_ByRef content)\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Dim str As String\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(&quot;SELECT * FROM tblAdressen&quot;, dbOpenDynaset)\r\n    str = &quot;&lt;menu xmlns=&quot;&quot;http:\/\/schemas.microsoft.com\/office\/2006\/01\/customui&quot;&quot;&gt;&quot;\r\n    Do While Not rst.EOF\r\n        str = str &amp; &quot;&lt;button id=&quot;&quot;btnMnu&quot; &amp; rst!AdresseID &amp; &quot;&quot;&quot; label=&quot;&quot;&quot; &amp; rst!Vorname &amp; &quot; &quot; _\r\n        &amp; rst!Nachname &amp; &quot;&quot;&quot;\/&gt;&quot;\r\n        rst.MoveNext\r\n    Loop\r\n    str = str &amp; &quot;&lt;\/menu&gt;&quot;\r\n    content = str\r\n    End Sub\r\nstr = str &amp; &quot;&lt;button id=&quot;&quot;btnMnu&quot;\r\n&amp; rst!AdresseID &amp; &quot;&quot;&quot; label=&quot;&quot;&quot; &amp; rst!Vorname\r\n&amp; &quot; &quot; &amp; rst!Nachname &amp; &quot;&quot;&quot; onAction=&quot;&quot;onAction_DynamicMenu&quot;&quot; tag=&quot;&quot;&quot; &amp; rst!AdresseID &amp; &quot;&quot;&quot;\/&gt;&quot;<\/pre>\n<p>Ein einzelnes <b>button<\/b>-Element sieht nun so aus:<\/p>\n<pre>&lt;button id=&quot;btnMnu1&quot; label=&quot;Andr&eacute; Minhorst&quot; onAction=&quot;onAction_DynamicMenu&quot; tag=&quot;1&quot;\/&gt;<\/pre>\n<p>Entscheidend ist hier nicht der Aufruf der Callback-Funktion <b>onAction_DynamicMenu<\/b>, sondern das Festlegen des Prim&auml;rschl&uuml;sselwertes des jeweiligen Datensatzes f&uuml;r das Attribut <b>tag<\/b>. Diesen k&ouml;nnen Sie in der Callback-Funktion n&auml;mlich wie folgt auswerten:<\/p>\n<pre>Sub onAction_DynamicMenu(control As _\r\n    IRibbonControl)\r\n    Dim lngID As Long\r\n    lngID = control.Tag\r\n    MsgBox &quot;Sie haben den Button f&uuml;r den\r\n    Eintrag mit der ID &quot; &amp; lngID &amp; &quot; gedr&uuml;ckt.&quot;\r\n    End Sub<\/pre>\n<p>Statt des Meldungsfensters k&ouml;nnen Sie hier nat&uuml;rlich auch ein Detailformular anzeigen und diesem per <b>WhereCondition<\/b> oder <b>OpenArgs <\/b>die per <b>tag<\/b> gelieferte <b>ID <\/b>&uuml;bergeben.<\/p>\n<p><b>Aktualisieren des dynamicMenu-Elements<\/b><\/p>\n<p>Zum Aktualisieren bietet das <b>dynamicMenu<\/b>-Element genau wie das <b>comboBox<\/b>-Element das Attribut <b>invalidateContentOnDrop <\/b>an.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Die Auswahl von Daten l&auml;sst sich gleich mit mehreren Ribbon-Steuerelementen realisieren, wobei alle Elemente dynamisch aktualisiert werden k&ouml;nnen. Einem Auslagern solcher Funktionen steht somit nichts mehr im Wege, solange keine Features wie Autovervollst&auml;ndigen et cetera gefragt sind. Der gro&szlig;e Vorteil ist, dass das Ribbon normalerweise immer sichtbar ist und der Benutzer st&auml;ndig auf dessen Steuerelemente zugreifen kann.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>RibbonCombos.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{1A6E1ED1-AC05-4B67-A968-E310CA0DF11E}\/aiu_676.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das mit Access 2007 neu eingef&uuml;hrte Ribbon kommt mit einer Menge interessanter Steuerelemente. Zur Auswahl von Daten gibt es gleich mehrere Kandidaten, von denen wir uns diejenigen ansehen, die sich dynamisch etwa mit den Daten aus Tabellen f&uuml;llen lassen: Zwei verschiedene Kombinationsfelder und zus&auml;tzlich auch noch ein dynamisch zu f&uuml;llendes Men&uuml;, dass sich prima f&uuml;r die Datenauswahl zweckentfremden l&auml;sst. Dieser Beitrag zeigt, wie Sie Daten aus Tabellen und sonstigen Quellen in diese Steuerelemente f&uuml;llen und sie zur Anwendungssteuerung benutzen k&ouml;nnen.<\/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":[662009,66042009,44000028],"tags":[],"class_list":["post-55000676","post","type-post","status-publish","format-standard","hentry","category-662009","category-66042009","category-Ergonomie_und_Benutzeroberflaeche"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Auswahlfelder im Ribbon - 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\/Auswahlfelder_im_Ribbon\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Auswahlfelder im Ribbon\" \/>\n<meta property=\"og:description\" content=\"Das mit Access 2007 neu eingef&uuml;hrte Ribbon kommt mit einer Menge interessanter Steuerelemente. Zur Auswahl von Daten gibt es gleich mehrere Kandidaten, von denen wir uns diejenigen ansehen, die sich dynamisch etwa mit den Daten aus Tabellen f&uuml;llen lassen: Zwei verschiedene Kombinationsfelder und zus&auml;tzlich auch noch ein dynamisch zu f&uuml;llendes Men&uuml;, dass sich prima f&uuml;r die Datenauswahl zweckentfremden l&auml;sst. Dieser Beitrag zeigt, wie Sie Daten aus Tabellen und sonstigen Quellen in diese Steuerelemente f&uuml;llen und sie zur Anwendungssteuerung benutzen k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:16:45+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/6ca3a1fc1f174d9b8d6f7e5b4255be43\" \/>\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=\"21\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Auswahlfelder im Ribbon\",\"datePublished\":\"2020-05-22T22:16:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/\"},\"wordCount\":3021,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6ca3a1fc1f174d9b8d6f7e5b4255be43\",\"articleSection\":[\"2009\",\"4\\\/2009\",\"Ergonomie und Benutzeroberfl\u00e4che\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/\",\"name\":\"Auswahlfelder im Ribbon - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6ca3a1fc1f174d9b8d6f7e5b4255be43\",\"datePublished\":\"2020-05-22T22:16:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6ca3a1fc1f174d9b8d6f7e5b4255be43\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6ca3a1fc1f174d9b8d6f7e5b4255be43\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Auswahlfelder_im_Ribbon\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Auswahlfelder im 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":"Auswahlfelder im Ribbon - 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\/Auswahlfelder_im_Ribbon\/","og_locale":"de_DE","og_type":"article","og_title":"Auswahlfelder im Ribbon","og_description":"Das mit Access 2007 neu eingef&uuml;hrte Ribbon kommt mit einer Menge interessanter Steuerelemente. Zur Auswahl von Daten gibt es gleich mehrere Kandidaten, von denen wir uns diejenigen ansehen, die sich dynamisch etwa mit den Daten aus Tabellen f&uuml;llen lassen: Zwei verschiedene Kombinationsfelder und zus&auml;tzlich auch noch ein dynamisch zu f&uuml;llendes Men&uuml;, dass sich prima f&uuml;r die Datenauswahl zweckentfremden l&auml;sst. Dieser Beitrag zeigt, wie Sie Daten aus Tabellen und sonstigen Quellen in diese Steuerelemente f&uuml;llen und sie zur Anwendungssteuerung benutzen k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:16:45+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/6ca3a1fc1f174d9b8d6f7e5b4255be43","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"21\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Auswahlfelder im Ribbon","datePublished":"2020-05-22T22:16:45+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/"},"wordCount":3021,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/6ca3a1fc1f174d9b8d6f7e5b4255be43","articleSection":["2009","4\/2009","Ergonomie und Benutzeroberfl\u00e4che"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/","url":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/","name":"Auswahlfelder im Ribbon - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/6ca3a1fc1f174d9b8d6f7e5b4255be43","datePublished":"2020-05-22T22:16:45+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/6ca3a1fc1f174d9b8d6f7e5b4255be43","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/6ca3a1fc1f174d9b8d6f7e5b4255be43"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Auswahlfelder_im_Ribbon\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Auswahlfelder im 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\/55000676","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=55000676"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000676\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}