{"id":55000894,"date":"2013-08-01T00:00:00","date_gmt":"2020-05-22T21:29:36","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=894"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Ribbons_und_Formulare","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/","title":{"rendered":"Ribbons und Formulare"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/42dfa2ff5fe64ce7bebf51973835a64f\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p class=''introduction''>W&auml;hrend der eine Entwickler sich zufrieden gibt, wenn das Ribbon Schaltfl&auml;chen zum &ouml;ffnen der verschiedenen Formulare bereith&auml;lt, m&ouml;chte der andere gleich einige Formularfunktionen in das Ribbon auslagern. Dazu muss man erstens einem Formular das passende Ribbon zuweisen und zweitens vom Ribbon aus die entsprechenden Formularfunktionen ausl&ouml;sen. Dieser Beitrag liefert die Grundlagen zu diesem Thema und mehr.<\/p>\n<p><b>Formular per Ribbon &ouml;ffnen<\/b><\/p>\n<p>Bevor Sie ein Ribbon anzeigen, das spezielle Befehle f&uuml;r die Zusammenarbeit mit dem aktuellen Formular anzeigen soll, m&uuml;ssen Sie dem Benutzer Ihrer Anwendung ja zun&auml;chst einmal die M&ouml;glichkeit geben, dieses Formular &uuml;berhaupt zu &ouml;ffnen.<\/p>\n<p>Dies nutzen wir als Aufw&auml;rm&uuml;bung: Wir erstellen ein Ribbon, das gleich beim &ouml;ffnen der Datenbankanwendung angezeigt wird und eine Schaltfl&auml;che zum &ouml;ffnen des gew&uuml;nschten Formulars anbietet. <\/p>\n<p>Das <b>tab<\/b>-Element soll direkt an erster Stelle erscheinen, also noch vor den eingebauten Elementen.<\/p>\n<p>Wir k&ouml;nnten die eingebauten Elemente einfach ausblenden, aber dann m&uuml;ssten wir die Datenbank immer wieder bei gedr&uuml;ckter Umschalttaste neu &ouml;ffnen, um die &uuml;brigen Ribbon-Befehle zur Entwicklung der weiteren Elemente zu nutzen.<\/p>\n<p>Das Ribbon soll also wie in Bild 1 aussehen. Um dies zu erreichen, sind die folgenden Schritte n&ouml;tig:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_894_001.png\" alt=\"Ribbon-Schaltfl&auml;che zum &ouml;ffnen eines Formulars\" width=\"270\" height=\"105,1145\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Ribbon-Schaltfl&auml;che zum &ouml;ffnen eines Formulars<\/span><\/b><\/p>\n<ul>\n<li>Einrichten einer Tabelle namens <b>USysRibbons <\/b>mit den Feldern <b>Ribbon-ID <\/b>(Auto-wert, Prim&auml;rschl&uuml;sselfeld), <b>RibbonName <\/b>(Text, 255 Zeichen) und <b>RibbonXML <\/b>(Memo).<\/li>\n<li>Einf&uuml;gen eines Datensatzes mit dem Wert Hauptribbon im Feld <b>RibbonName <\/b>und dem XML-Code aus Listing 1 im Feld <b>RibbonXML<\/b>.<\/li>\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=\"tabMain\" label=\"Hauptribbon\" insertBeforeMso=\"TabHomeAccess\"&gt;\r\n         &lt;group id=\"grpFormulare\" label=\"Formulare\"&gt;\r\n           &lt;button imageMso=\"AccessFormDatasheet\" label=\"Formular &ouml;ffnen\" \r\n           id=\"btnFormularOeffnen\" size=\"large\" onAction=\"onAction\"\/&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: Ribbon-XML f&uuml;r das Start-Ribbon der Anwendung<\/span><\/b><\/p>\n<li>Schlie&szlig;en und erneutes &ouml;ffnen der Datenbank, um das neue Ribbon in den Anwendungsoptionen verf&uuml;gbar zu machen.<\/li>\n<li>Einstellen der Option <b>Name des Men&uuml;bands <\/b>auf den Wert <b>Hauptribbon<\/b> (Access 2010, die Bezeichnung der Eigenschaft kann sich in anderen Versionen unterscheiden).<\/li>\n<\/ul>\n<p>Die Ribbon-Definition legt f&uuml;r das <b>tab<\/b>-Element zun&auml;chst <b>id <\/b>und <b>label <\/b>fest. Damit das <b>tab<\/b>-Element als erstes Element im Hauptribbon von Access erscheint, stellen Sie das Attribut <b>insertBeforeMso <\/b>auf den Wert <b>TabHomeAccess <\/b>ein. <b>TabHomeAccess <\/b>entspricht dem eindeutigen Bezeichner f&uuml;r das <b>tab<\/b>-Element mit der Bezeichnung <b>Start<\/b>.<\/p>\n<p>Das <b>button<\/b>-Element erh&auml;lt ein passendes eingebautes Symbol und den Wert <b>onAction <\/b>f&uuml;r das Attribut <b>onAction<\/b>. Das hei&szlig;t, dass beim Anklicken der Schaltfl&auml;che eine VBA-Prozedur namens <b>onAction <\/b>ausgel&ouml;st werden soll.<\/p>\n<p>Damit dies gelingt, legen wir ein VBA-Modul namens <b>mdlRibbons <\/b>an und f&uuml;gen die Prozedur aus Listing 2 ein.<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>onAction(control<span style=\"color:blue;\"> As <\/span>IRibbonControl)\r\n     Select Case control.Id\r\n         <span style=\"color:blue;\">Case <\/span>\"btnFormularOeffnen\"\r\n             DoCmd.OpenForm \"frmRibbonbeispiele\"\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: &ouml;ffnen eines Formulars per Mausklick auf eine Ribbon-Schaltfl&auml;che<\/span><\/b><\/p>\n<p>Diese nimmt mit dem Parameter <b>control <\/b>einen Verweis auf das ausl&ouml;sende Ribbon-Steuerelement entgegen, dessen Namen Sie mit der Eigenschaft <b>id <\/b>ermitteln und anschlie&szlig;end auswerten k&ouml;nnen. Sollte die Funktion durch die Schaltfl&auml;che <b>btnFormularOeffnen <\/b>ausgel&ouml;st worden sein, soll die Prozedur das Formular <b>frmRibbonbeispiele <\/b>&ouml;ffnen.<\/p>\n<p>Damit all dies reibungslos funktioniert, f&uuml;gen Sie dem VBA-Projekt noch einen Verweis auf die jeweilige Office-Bibliothek hinzu (<b>Microsoft Office x.0 Object Library<\/b>) und aktivieren die Option <b>Fehler des Benutzeroberfl&auml;chen-Add-Ins anzeigen <\/b>im Bereich <b>Clienteinstellungen <\/b>der Access-Optionen (s. Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_894_002.png\" alt=\"Einstellen des Anwendungsribbons\" width=\"570\" height=\"300,2347\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Einstellen des Anwendungsribbons<\/span><\/b><\/p>\n<p><b>Eingebaute Elemente ausblenden<\/b><\/p>\n<p>Wenn Sie die Anwendung an den Benutzer weitergeben, soll dieser m&ouml;glicherweise nur noch die benutzerdefinierten Elemente sehen und keine eingebauten mehr. Dazu brauchen Sie nur eine Zeile der Ribbon-Definition zu &auml;ndern, n&auml;mlich die des <b>ribbon<\/b>-Elements. Dort f&uuml;gen Sie das Attribut <b>startFromScratch <\/b>mit dem Wert <b>true <\/b>hinzu:<\/p>\n<pre>  &lt;ribbon startFromScratch=\"true\"&gt;<\/pre>\n<p>Die eingebauten Ribbon-Elemente werden nun ausgeblendet.<\/p>\n<p><b>Ribbon mit Formular anzeigen<\/b><\/p>\n<p>Nun folgt der zweite Teil der Aufgabe: Wenn das Formular <b>frmRibbonbeispiele <\/b>ge&ouml;ffnet wurde, soll das aktuelle Ribbon durch ein weiteres Ribbon ersetzt werden.<\/p>\n<p>Dieses soll zun&auml;chst lediglich einen einzigen Befehl anzeigen &#8211; n&auml;mlich den zum Schlie&szlig;en des Formulars. Dazu definieren wir das Ribbon wie im XML-Dokument aus Listing 3. Grunds&auml;tzlich ist das Ribbon genau wie das Hauptribbon aufgebaut.<\/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 startFromScratch=\"true\"&gt;\r\n     &lt;tabs&gt;\r\n       &lt;tab id=\"tabFormular\" label=\"Formularfunktionen\"&gt;\r\n         &lt;group id=\"grpAllgemein\" label=\"Allgemein\"&gt;\r\n           &lt;button imageMso=\"GroupColorModeClose\" label=\"Schlie&szlig;en\" \r\n           id=\"btnSchliessen\" onAction=\"onAction\" 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><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Definition des Formular-Ribbons<\/span><\/b><\/p>\n<p>Es gibt jedoch einen entscheidenden Unterschied: Das Attribut <b>startFromScratch <\/b>des <b>ribbon<\/b>-Elements ist auf den Wert <b>true <\/b>eingestellt.<\/p>\n<p>Dies bewirkt, dass alle anderen Elemente, also sowohl die eingebauten als auch die des als Anwendungsribbon definierten Ribbons ausgeblendet werden. Das Ergebnis finden Sie in Bild 3.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_894_003.png\" alt=\"Mit dem Formular wird auch das angegebene Ribbon eingeblendet.\" width=\"275\" height=\"218,0588\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Mit dem Formular wird auch das angegebene Ribbon eingeblendet.<\/span><\/b><\/p>\n<p>Damit die Schaltfl&auml;che die gew&uuml;nschte Wirkung zeigt und diese das Formular schlie&szlig;t, f&uuml;gen Sie zu der <b>Select Case<\/b>-Bedingung der <b>onAction<\/b>-Prozedur einen Eintrag hinzu. Dieser sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Case <\/span>\"btnSchliessen\"\r\n     DoCmd.Close acForm,  \"frmRibbonbeispiele\"<\/pre>\n<p><b>Anwendungsribbon und Formularribbon gleichzeitig<\/b><\/p>\n<p>Sie k&ouml;nnen auch beide Ribbons gleichzeitig anzeigen. Dazu m&uuml;ssen Sie zun&auml;chst das Attribut <b>startFromScratch <\/b>des Formular-Ribbons auf <b>false <\/b>einstellen.<\/p>\n<p>Wenn Sie dann allerdings das Formular mit der Ribbon-Schaltfl&auml;che <b>btnFormularOeffnen <\/b>anzeigen, wird das Formular-Ribbon zwar hinzugef&uuml;gt, aber nicht eingeblendet (s. Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_894_005.png\" alt=\"Das Formular-Tab wird zwar hinzugef&uuml;gt, aber nicht aktiviert.\" width=\"275\" height=\"181,3673\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Das Formular-Tab wird zwar hinzugef&uuml;gt, aber nicht aktiviert.<\/span><\/b><\/p>\n<p>Allerdings gibt es doch diesen sch&ouml;nen Effekt, mit dem beispielsweise das eingebaute Datenblatt-Tab eingeblendet wird, wenn der Benutzer ein Datenblatt in den Fokus bringt (s. Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_894_006.png\" alt=\"Kontextsensitives Einblenden eingebauter Ribbon-Tabs\" width=\"575\" height=\"196,7105\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Kontextsensitives Einblenden eingebauter Ribbon-Tabs<\/span><\/b><\/p>\n<p>Dann wird eine zus&auml;tzliche &uuml;berschrift angezeigt (hier Formulartools) und das Ribbon-Tab damit farbig hervorgehoben. Das m&uuml;sste doch auch f&uuml;r benutzerdefinierte Ribbon-Tabs funktionieren!<\/p>\n<p>Machen wir uns an die Arbeit: Das Hauptribbon erh&auml;lt ein weiteres <b>button<\/b>-Element, mit dem wir das zweite Beispielformular &ouml;ffnen wollen:<\/p>\n<pre>&lt;button id=\"btnKontextformular\" \r\nimageMso=\"AccessFormWizard\" \r\nlabel=\"Formular mit Kontexttab\" \r\nonAction=\"onAction\" size=\"large\"\/&gt;<\/pre>\n<p>Die <b>onAction<\/b>-Prozedur erweitern wir so:<\/p>\n<pre><span style=\"color:blue;\">Case <\/span>\"btnKontextformular\"\r\n     DoCmd.OpenForm  \"frmRibbonKontextabhaengig\"<\/pre>\n<p>Nun m&uuml;ssen wir nur noch eine Ribbon-Definition f&uuml;r das Formular-Ribbon erstellen. Diese sieht wie in Listing 4 aus. Der wesentliche Unterschied ist, dass sich unterhalb des <b>ribbon<\/b>-Elements nicht direkt das <b>tabs<\/b>-Element befindet, sondern erst noch ein <b>contextualTabs<\/b>-Element und ein <b>tabSet<\/b>-Element.<\/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 startFromScratch=\"false\"&gt;\r\n     &lt;contextualTabs&gt;\r\n       &lt;tab<span style=\"color:blue;\">Set<\/span> idMso=\"TabSetFormReportExtensibility\"&gt;\r\n         &lt;tab id=\"tabKontext\" label=\"Formularfunktionen\"&gt;\r\n           &lt;group id=\"grpAllgemein\" label=\"Allgemein\"&gt;\r\n             &lt;button id=\"btnSchliessen\" imageMso=\"GroupColorModeClose\" \r\n             label=\"Schlie&szlig;en\" onAction=\"onAction\" size=\"large\"\/&gt;\r\n           &lt;\/group&gt;\r\n         &lt;\/tab&gt;\r\n       &lt;\/tabSet&gt;\r\n     &lt;\/contextualTabs&gt;\r\n   &lt;\/ribbon&gt;\r\n&lt;\/customUI&gt;<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Definition des Ribbons mit kontextabh&auml;ngigem tab-Element<\/span><\/b><\/p>\n<p>Letzteres muss als <b>idMso <\/b>unbedingt den Wert <b>TabSetFormReportExtensibility <\/b>erhalten. Erst im <b>tabSet<\/b>-Element legen Sie das gewohnte tab-Element mit den entsprechenden Unterelementen an.<\/p>\n<p>Das Ergebnis sieht zun&auml;chst wie in Bild 6 aus. Als &uuml;berschrift des neu eingeblendeten Bereichs verwendet Access nun den Formularnamen, in dessen Kontext das <b>tab<\/b>-Element eingeblendet wurde.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_894_007.png\" alt=\"Kontextabh&auml;ngiges Tab\" width=\"270\" height=\"111,4745\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Kontextabh&auml;ngiges Tab<\/span><\/b><\/p>\n<p>Wem dies noch nicht gef&auml;llt, der kann die Eigenschaft <b>Beschriftung<\/b> des Formulars noch anpassen. Das kontextabh&auml;ngige <b>tab<\/b>-Element erh&auml;lt dann die gleiche Beschriftung wie das Formular (s. Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_894_008.png\" alt=\"Individuelle &uuml;berschrift\" width=\"270\" height=\"104,4275\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Individuelle &uuml;berschrift<\/span><\/b><\/p>\n<p><b>Schlie&szlig;en der Formulare<\/b><\/p>\n<p>Nun weist die Beispieldatenbank bereits zwei Formulare auf, die jeweils ein eigenes Ribbon mit sich bringen.<\/p>\n<p>Dummerweise haben wir die Schaltfl&auml;che zum Schlie&szlig;en der Ribbons jeweils <b>btnSchliessen <\/b>genannt.<\/p>\n<p>In der <b>Select Case<\/b>-Bedingung der Prozedur <b>onAction <\/b>haben wir f&uuml;r diese Schaltfl&auml;che bislang die folgenden Codezeilen reserviert:<\/p>\n<pre><span style=\"color:blue;\">Case <\/span>\"btnSchliessen\"\r\n     Select Case Screen.ActiveForm.Name\r\n         <span style=\"color:blue;\">Case <\/span>\"frmRibbonBeispiele\"\r\n             DoCmd.Close acForm,  \"frmRibbonbeispiele\"<\/pre>\n<p>Da diese Bedingung aber nun auch von der Schaltfl&auml;che <b>btnSchliessen <\/b>des Ribbons eines zweiten Formulars aufgerufen wird, stehen wir vor einem Problem.<\/p>\n<p>Es gibt nun zwei M&ouml;glichkeiten:<\/p>\n<ul>\n<li>entweder wir vergeben den verschiedenen Schlie&szlig;en-Schaltfl&auml;chen unterschiedliche Namen oder<\/li>\n<li>wir fragen im Code ab, welches Formular gerade den Fokus besitzt und schlie&szlig;en dieses dann.<\/li>\n<\/ul>\n<p>Da wir uns je nach der Anzahl der Formulare mit einem eigenen Ribbon eine Menge Bezeichnungen f&uuml;r die <b>Schlie&szlig;en<\/b>-Schaltfl&auml;che ausdenken m&uuml;ssten, wenden wir die zweite Methode an.<\/p>\n<p>Den Formularnamen fragen wir mit dem Ausdruck <b>Screen.ActiveForm.Name <\/b>ab und werten diesen im ersten Ansatz so aus:<\/p>\n<pre><span style=\"color:blue;\">Case <\/span>\"btnSchliessen\"\r\n     Select Case Screen.ActiveForm.Name\r\n         <span style=\"color:blue;\">Case <\/span>\"frmRibbonBeispiele\"\r\n             DoCmd.Close acForm,  \"frmRibbonbeispiele\"\r\n         <span style=\"color:blue;\">Case <\/span>\"frmRibbonKontextabhaengig\"\r\n             DoCmd.Close acForm,  \"frmRibbonKontextabhaengig\"\r\n     <span style=\"color:blue;\">End Select<\/span><\/pre>\n<p>Das artet je nach Anzahl der Formulare aber immer noch in eine enorme Flei&szlig;arbeit aus. Warum also nicht einfach so:<\/p>\n<pre><span style=\"color:blue;\">Case <\/span>\"btnSchliessen\"\r\n     DoCmd.Close acForm,  Screen.ActiveForm.Name<\/pre>\n<p><b>Haupt- und Unterformular<\/b><\/p>\n<p>Wenn Sie Daten in Haupt- und Unterformular bearbeiten, k&ouml;nnen Sie schnell in eine Falle tappen.<\/p>\n<p>Wenn Sie etwa f&uuml;r ein Formular ein Ribbon namens <b>HauptUndUnterformular <\/b>deklarieren und dieses der Eigenschaft <b>Name des Men&uuml;bands <\/b>des Hauptformulars zuweisen, wird dieses unter Umst&auml;nden trotzdem nicht angezeigt.<\/p>\n<p>Wenn man es nicht wei&szlig;, geht man m&ouml;glicherweise von einem Fehler aus, der auch noch nicht reproduzierbar scheint &#8211; denn manchmal zeigt das Formular das Ribbon an und manchmal nicht.<\/p>\n<p>Dies sieht dann beispielsweise wie in Bild 8 aus, wo statt des gew&uuml;nschten Ribbons das eingebaute Datenblatt-Tab angezeigt wird.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_04\/pic_894_009.png\" alt=\"Das Formular-Ribbon wird nicht angezeigt.\" width=\"575\" height=\"318,4615\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Das Formular-Ribbon wird nicht angezeigt.<\/span><\/b><\/p>\n<p>Sie ahnen es bereits: Es hat mit dem Unterformular zu tun. Und in der Tat gilt die Zuweisung eines Ribbons an das Hauptformular auch nur f&uuml;r dieses &#8211; sobald der Fokus auf das Unterformular oder eines der darin enthaltenen Steuerelemente verschoben wird, fliegt das benutzerdefinierte Ribbon raus.<\/p>\n<p>Sie m&uuml;ssen also f&uuml;r die Eigenschaft <b>Name des Men&uuml;-bands <\/b>f&uuml;r das Unterformular ebenfalls die gew&uuml;nschte Ribbon-Definition festlegen.<\/p>\n<p>Allerdings wollen wir dies nicht fix in der entsprechenden Eigenschaft des Unterformulars erledigen, sondern etwas flexibler.<\/p>\n<p>Immerhin kann es ja auch geschehen, dass Sie ein Unterformular in verschiedenen Hauptformularen einsetzen &#8211; und dann soll dieses auch immer das dem Hauptformular zugeordnete Ribbon anzeigen.<\/p>\n<p>Also legen Sie f&uuml;r die Ereigniseigenschaft <b>Beim Laden <\/b>des Unterformulars die folgende Ereignisprozedur an:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     Me.RibbonName = Me.Parent.RibbonName\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies sorgt daf&uuml;r, dass das Unterformular gleich beim Laden das Ribbon des &uuml;bergeordneten Formulars ausliest und die eigene Eigenschaft <b>RibbonName <\/b>auf dieses einstellt.<\/p>\n<p><b>Interaktion<\/b><\/p>\n<p>Formular und Ribbon k&ouml;nnen auch in Interaktion treten beziehungsweise die Beziehung kann noch intensiviert werden. Das beginnt damit, dass Sie im Formularmodul Funktionen definieren k&ouml;nnen, die dann von dem Ribbon, das durch das aktuelle Formular angezeigt wird, aufgerufen wird.<\/p>\n<p>Im Formular <b>frmInteraktiv<\/b> haben wir beispielsweise folgende Funktion hinterlegt:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Formularfunktion()\r\n     <span style=\"color:blue;\">MsgBox<\/span> \"Funktion im Klassenmodul  des Formulars aufgerufen\"\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Das Ribbon mit dem Namen <b>Interaktiv <\/b>enth&auml;lt f&uuml;r seine einzige Schaltfl&auml;che die folgende Definition:<\/p>\n<pre>&lt;button imageMso=\"MailMergeUpdateLabels\" \r\nlabel=\"Formularfunktion aufrufen\" \r\nid=\"btnFormularfunktion\" \r\nonAction=\"=Formularfunktion()\" \r\nsize=\"large\"\/&gt;<\/pre>\n<p>Dies sorgt daf&uuml;r, dass die Funktion im Klassenmodul des Formulars durch Anklicken der Ribbon-Schaltfl&auml;che aufgerufen werden kann.<\/p>\n<p><b>Weitere M&ouml;glichkeiten der Interaktion<\/b><\/p>\n<p>Es gibt hier sicher noch mehr M&ouml;glichkeiten, Formular und Ribbon miteinander zu verdrahten. Letztlich ist das Ribbon aber immer noch recht langsam und auch der Entwicklungs- und Wartungsaufwand ist gegen&uuml;ber den herk&ouml;mmlichen Steuerelementen in Formularen h&ouml;her.<\/p>\n<p>Wer wirklich wenig Platz auf dem Bildschirm hat, kann sicher Funktionalit&auml;t vom Formular in das Ribbon auslagern, aber mit der Interaktion sollte man es nicht &uuml;bertreiben.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Formulare und Ribbons &#8211; diese Kombination arbeitet weitgehend gut zusammen. Dieser Beitrag zeigt einige M&ouml;glichkeiten f&uuml;r das Aufrufen von Formularen per Ribbon, aber auch zur Anzeige von Ribbons im Kontext des aktiven Formulars.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Formularribbons.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{5DC30B12-735B-45A8-BD0A-E54EB8BFE807}\/aiu_894.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W&auml;hrend der eine Entwickler sich zufrieden gibt, wenn das Ribbon Schaltfl&auml;chen zum &Ouml;ffnen der verschiedenen Formulare bereith&auml;lt, m&ouml;chte der andere gleich einige Formularfunktionen in das Ribbon auslagern. Dazu muss man erstens einem Formular das passende Ribbon zuweisen und zweitens vom Ribbon aus die entsprechenden Formularfunktionen ausl&ouml;sen. Dieser Beitrag liefert die Grundlagen zu diesem Thema und mehr.<\/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":[662013,66042013,44000028],"tags":[],"class_list":["post-55000894","post","type-post","status-publish","format-standard","hentry","category-662013","category-66042013","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>Ribbons und Formulare - 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\/Ribbons_und_Formulare\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ribbons und Formulare\" \/>\n<meta property=\"og:description\" content=\"W&auml;hrend der eine Entwickler sich zufrieden gibt, wenn das Ribbon Schaltfl&auml;chen zum &Ouml;ffnen der verschiedenen Formulare bereith&auml;lt, m&ouml;chte der andere gleich einige Formularfunktionen in das Ribbon auslagern. Dazu muss man erstens einem Formular das passende Ribbon zuweisen und zweitens vom Ribbon aus die entsprechenden Formularfunktionen ausl&ouml;sen. Dieser Beitrag liefert die Grundlagen zu diesem Thema und mehr.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:29:36+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/42dfa2ff5fe64ce7bebf51973835a64f\" \/>\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=\"10\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Ribbons und Formulare\",\"datePublished\":\"2020-05-22T21:29:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/\"},\"wordCount\":1765,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/42dfa2ff5fe64ce7bebf51973835a64f\",\"articleSection\":[\"2013\",\"4\\\/2013\",\"Ergonomie und Benutzeroberfl\u00e4che\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/\",\"name\":\"Ribbons und Formulare - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/42dfa2ff5fe64ce7bebf51973835a64f\",\"datePublished\":\"2020-05-22T21:29:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/42dfa2ff5fe64ce7bebf51973835a64f\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/42dfa2ff5fe64ce7bebf51973835a64f\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ribbons_und_Formulare\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ribbons und Formulare\"}]},{\"@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":"Ribbons und Formulare - 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\/Ribbons_und_Formulare\/","og_locale":"de_DE","og_type":"article","og_title":"Ribbons und Formulare","og_description":"W&auml;hrend der eine Entwickler sich zufrieden gibt, wenn das Ribbon Schaltfl&auml;chen zum &Ouml;ffnen der verschiedenen Formulare bereith&auml;lt, m&ouml;chte der andere gleich einige Formularfunktionen in das Ribbon auslagern. Dazu muss man erstens einem Formular das passende Ribbon zuweisen und zweitens vom Ribbon aus die entsprechenden Formularfunktionen ausl&ouml;sen. Dieser Beitrag liefert die Grundlagen zu diesem Thema und mehr.","og_url":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:29:36+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/42dfa2ff5fe64ce7bebf51973835a64f","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"10\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Ribbons und Formulare","datePublished":"2020-05-22T21:29:36+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/"},"wordCount":1765,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/42dfa2ff5fe64ce7bebf51973835a64f","articleSection":["2013","4\/2013","Ergonomie und Benutzeroberfl\u00e4che"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/","url":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/","name":"Ribbons und Formulare - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/42dfa2ff5fe64ce7bebf51973835a64f","datePublished":"2020-05-22T21:29:36+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/42dfa2ff5fe64ce7bebf51973835a64f","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/42dfa2ff5fe64ce7bebf51973835a64f"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Ribbons_und_Formulare\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Ribbons und Formulare"}]},{"@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\/55000894","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=55000894"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000894\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}