{"id":55001091,"date":"2017-06-01T00:00:00","date_gmt":"2020-05-14T13:43:05","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1091"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Kundenverwaltung_mit_Ribbon_Teil_I","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/","title":{"rendered":"Kundenverwaltung mit Ribbon, Teil I"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/b9e2791a80bd4fedb16b91376200aa1b\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Option zur Anzeige von Formularen im Registerkartenformat<\/span><\/b><\/p>\n<p><b>Im Beitrag &#8222;Ribbonklassen&#8220; haben wir gezeigt, wie Sie das Ribbon allein mit VBA-Code definieren k&ouml;nnen. Nun wollen wir diese Technik in einer kleinen Beispielanwendung demonstrieren, in der wir eine Adressenliste in einem Formular anzeigen und alle Befehle zu dieser Adressenliste im Ribbon einbauen &#8211; also etwa, um einen neuen Datensatz anzulegen, einen bestehenden Datensatz zu l&ouml;schen oder die Details zu einem Datensatz anzuzeigen.<\/b><\/p>\n<p>Dabei nutzen wir in diesem Fall im Gegensatz zu den meisten anderen Anwendungen den standardm&auml;&szlig;ig eingestellten Wert <b>Dokumente im Registerkartenformat <\/b>der Option <b>Dokumentfensteroptionen <\/b>in den Access-Optionen. Die Option <b>Dokumentregisterkarten anzeigen <\/b>wollen wir allerdings deaktivieren (s. Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1091_001.png\" alt=\"Option zur Anzeige von Formularen im Registerkartenformat\" width=\"649,559\" height=\"375,3202\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Option zur Anzeige von Formularen im Registerkartenformat<\/span><\/b><\/p>\n<h2>Hauptformular der Anwendung erstellen<\/h2>\n<p>Anschlie&szlig;end erstellen wir ein Formular, das alle Datens&auml;tze der Tabelle <b>tblKunden <\/b>in der Datenblattansicht anzeigen soll. Normalerweise w&uuml;rden wir eine solche Ansicht als Unterformular in ein Hauptformular integrieren, um noch weitere Steuer-elemente f&uuml;r die Verwaltung der Daten in der Datenblattansicht bereitzustellen &#8211; etwa zum Anlegen neuer Datens&auml;tze, zum L&ouml;schen eines bestehenden Datensatzes oder auch um einen Datensatz zum Bearbeiten zu &ouml;ffnen. Wenn wir allerdings einmal alle Befehle f&uuml;r den Zugriff auf die Adressdaten in das Ribbon verschieben, brauchen wir ja kein &uuml;bergeordnetes Formular mehr.<\/p>\n<p>Also legen Sie ein neues Formular an und speichern es unter dem Namen <b>frmKundenuebersicht<\/b>. Diesem Formular weisen Sie als Datenherkunft die Abfrage <b>qryKunden <\/b>zu, die alle Felder der Tabelle <b>tblKunden <\/b>enth&auml;lt und diese alphabetisch nach dem Nachnamen der Lieferanschrift sortiert (s. Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1091_003.png\" alt=\"Datenherkunft f&uuml;r das Hauptformular\" width=\"599,593\" height=\"331,3276\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Datenherkunft f&uuml;r das Hauptformular<\/span><\/b><\/p>\n<h2>Registerkartenformat und Screenshots<\/h2>\n<p>W&auml;hrend ich den Screenshot dieser Abfrage machen m&ouml;chte, stelle ich &uuml;brigens fest, warum ich pers&ouml;nlich nie mit der Option <b>Dokumente im Registerkartenformat <\/b>arbeite: Damit lassen sich einfach keine vern&uuml;nftigen Screenshots einzelner Access-Objekte machen. Eine Abfrage etwa wird komplett &uuml;ber das Access-Fenster verteilt. Ich m&uuml;sste nun das Access-Fenster zusammenschrumpfen, um alles in ad&auml;quater Gr&ouml;&szlig;e knipsen zu k&ouml;nnen und m&uuml;sste den Screenshot dann noch manuell beschneiden, weil der Abfrageentwurf in diesem Fall kein eigenes Fenster ist, das man mit g&auml;ngigen Screenshot-Tools leicht erfassen k&ouml;nnte. Also werde ich w&auml;hrend der Erstellung dieses Beitrags wohl oder &uuml;bel zwischen den einzelnen Ansichten wechseln m&uuml;ssen &#8230;<\/p>\n<h2>Hauptformular anlegen<\/h2>\n<p>Die soeben erstellte Abfrage <b>qryKunden <\/b>legen wir als Datenherkunft f&uuml;r ein neues Formular namens <b>frmKundenuebersicht <\/b>fest. Danach ziehen Sie alle Felder der Datenherkunft aus der Feldliste in den Detailbereich des Formularentwurfs (s. Bild 3). Damit die Daten in der Datenblattansicht angezeigt werden, legen Sie f&uuml;r die Eigenschaft <b>Standardansicht <\/b>den Wert <b>Datenblatt <\/b>fest.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1091_002.png\" alt=\"Entwurf des Hauptformulars frmKundenuebersicht\" width=\"599,593\" height=\"447,2847\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Entwurf des Hauptformulars frmKundenuebersicht<\/span><\/b><\/p>\n<p>Ein Wechsel in die Formularansicht zeigt das Formular mit den gew&uuml;nschten Daten, das wir nun um einige Funktionen anreichern wollen &#8211; und zwar, indem wir diese in das Ribbon der Anwendung aufnehmen.<\/p>\n<p>Um alle Features des Ribbons zu erl&auml;utern, wollen wir die Kunden&uuml;bersicht allerdings nicht direkt beim &ouml;ffnen der Anwendung einblenden, sondern zun&auml;chst nur einen Ribbon-Eintrag anzeigen, der das &ouml;ffnen der Kunden&uuml;bersicht erlaubt. Erst beim &ouml;ffnen dieser &uuml;bersicht sollen dann die f&uuml;r dieses Formular spezifischen Befehle im Ribbon angezeigt werden. Wie dies gelingt, erfahren Sie in den folgenden Abschnitten.<\/p>\n<p>Hinweis: Wenn Sie diese Anwendung als reine Adressverwaltung nutzen wollen, die immer die Kunden&uuml;bersicht anzeigen soll, k&ouml;nnen Sie das Formular <b>frmKundenuebersicht<\/b> nat&uuml;rlich auch direkt als Startformular angeben. Dann wird das von uns f&uuml;r dieses Formular festgelegte Ribbon automatisch mit eingeblendet.<\/p>\n<h2>Vorbereitungen f&uuml;r das Anlegen des Ribbons<\/h2>\n<p>Wenn Sie unsere Ribbon-Klassen nutzen wollen, um das Ribbon zu programmieren, m&uuml;ssen Sie zuvor einige Access-Objekte aus der Beispieldatenbank in Ihre Zieldatenbank importieren. Dabei handelt es sich um die folgenden Objekte (bei allen Objekten au&szlig;er dem Makro <b>AutoExec <\/b>handelt es sich um Standard- oder Klassenmodule):<\/p>\n<ul>\n<li><b>Startribbon<\/b><\/li>\n<li><b>Ribbons<\/b><\/li>\n<li><b>clsButton<\/b><\/li>\n<li><b>clsControls<\/b><\/li>\n<li><b>clsGroup<\/b><\/li>\n<li><b>clsGroups<\/b><\/li>\n<li><b>clsRibbon<\/b><\/li>\n<li><b>clsSeparator<\/b><\/li>\n<li><b>clsTabs<\/b><\/li>\n<li><b>clsTab<\/b><\/li>\n<li><b>mdlRibbonEnums<\/b><\/li>\n<li><b>mdlRibbons<\/b><\/li>\n<li><b>mdlTools<\/b><\/li>\n<li><b>mdlZwischenablage<\/b><\/li>\n<li>Makro <b>AutoExec<\/b><\/li>\n<\/ul>\n<p>Diese Objekte f&uuml;gen Sie beispielsweise zur Zieldatenbank hinzu, indem Sie beide Datenbanken &ouml;ffnen und nebeneinander platzieren und dann die Objekte von einem Navigationsbereich zum anderen ziehen.<\/p>\n<p>Bevor Sie das Ribbon programmieren k&ouml;nnen, ben&ouml;tigen Sie auch noch einen Verweis auf die Bibliothek <b>Microsoft Office x.0 Object Library <\/b>(s. Bild 4). Diesen f&uuml;gen Sie &uuml;ber den <b>Verweise<\/b>-Dialog hinzu (VBA-Editor, Men&uuml;eintrag <b>Extras|Verweise<\/b>).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1091_004.png\" alt=\"Verweis auf die Office-Bibliothek\" width=\"424,7115\" height=\"334,8159\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Verweis auf die Office-Bibliothek<\/span><\/b><\/p>\n<p>Den Inhalt des Moduls <b>StartRibbon<\/b> ersetzen Sie nun durch die Codezeilen aus Listing 1. Wir wollen im Startribbon zwei Schaltfl&auml;chen anzeigen: Eines zum &ouml;ffnen der Kunden&uuml;bersicht und eine zum Beenden der Anwendung. F&uuml;r diese Schaltfl&auml;chen m&uuml;ssen wir Variablen des Typs <b>clsButton <\/b>deklarieren und mit dem Schl&uuml;sselwort <b>With-Events <\/b>ausstatten, da wir f&uuml;r diese ja Ereignisprozeduren hinterlegen wollen, die beim Anklicken der <b>Button<\/b>-Elemente ausgel&ouml;st werden.<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents btnKundenuebersicht<span style=\"color:blue;\"> As <\/span>clsButton\r\n<span style=\"color:blue;\">Dim <\/span>WithEvents btnBeenden<span style=\"color:blue;\"> As <\/span>clsButton\r\n<span style=\"color:blue;\">Public Sub <\/span>CreateRibbon()\r\n     <span style=\"color:blue;\">Dim <\/span>objRibbon<span style=\"color:blue;\"> As <\/span>clsRibbon\r\n     <span style=\"color:blue;\">Dim <\/span>objTab<span style=\"color:blue;\"> As <\/span>clsTab\r\n     <span style=\"color:blue;\">Dim <\/span>objGroup<span style=\"color:blue;\"> As <\/span>clsGroup\r\n     <span style=\"color:blue;\">Set<\/span> objRibbon = Ribbons.Add(\"Main\")\r\n     <span style=\"color:blue;\">With<\/span> objRibbon\r\n         .StartFromScratch = <span style=\"color:blue;\">True<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> objTab = .Tabs.Add(\"tabKundenverwaltung\")\r\n         <span style=\"color:blue;\">With<\/span> objTab\r\n             .Label = \"Kundenverwaltung\"\r\n             <span style=\"color:blue;\">Set<\/span> objGroup = .Groups.Add(\"grpUebersicht\")\r\n             <span style=\"color:blue;\">With<\/span> objGroup\r\n                 .Label = \"&uuml;bersicht\"\r\n                 <span style=\"color:blue;\">Set<\/span> btnKundenuebersicht = .Controls.Add(msoRibbonControlButton, \"btnKundenuebersicht\")\r\n                 <span style=\"color:blue;\">With<\/span> btnKundenuebersicht\r\n                     .Label = \"Kunden&uuml;bersicht\"\r\n                     .Size = msoRibbonControlSizelarge\r\n                     .Image = \"users3\"\r\n                 End <span style=\"color:blue;\">With<\/span>\r\n                 .Controls.Add msoRibbonControlSeparator\r\n                 <span style=\"color:blue;\">Set<\/span> btnBeenden = .Controls.Add(msoRibbonControlButton, \"btnBeenden\")\r\n                 <span style=\"color:blue;\">With<\/span> btnBeenden\r\n                     .Label = \"Beenden\"\r\n                     .Size = msoRibbonControlSizelarge\r\n                     .Image = \"close\"\r\n                 End <span style=\"color:blue;\">With<\/span>\r\n             End <span style=\"color:blue;\">With<\/span>\r\n         End <span style=\"color:blue;\">With<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     Ribbons.CreateStartRibbon \"Main\"\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>Beenden()<span style=\"color:blue;\"> As <\/span>clsButton\r\n     <span style=\"color:blue;\">Set<\/span> Beenden = btnBeenden\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>Kundenuebersicht()<span style=\"color:blue;\"> As <\/span>clsButton\r\n     <span style=\"color:blue;\">Set<\/span> Kundenuebersicht = btnKundenuebersicht\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>btnBeenden_OnAction(control<span style=\"color:blue;\"> As <\/span>Office.IRibbonControl)\r\n     DoCmd.Quit\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>btnKundenuebersicht_OnAction(control<span style=\"color:blue;\"> As <\/span>Office.IRibbonControl)\r\n     DoCmd.OpenForm \"frmKundenuebersicht\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Code f&uuml;r das Startribbon<\/span><\/b><\/p>\n<p>Die Prozedur <b>CreateRibbon <\/b>&uuml;bernimmt die Erstellung des Ribbons. Sie legt zun&auml;chst ein neues Objekt des Typs <b>clsRibbon <\/b>an. Dazu f&uuml;gt sie mit der <b>Add<\/b>-Methode ein neues Element zur Auflistung <b>Ribbons <\/b>hinzu. F&uuml;r dieses stellen wir nun die Eigenschaft <b>StartFromScratch <\/b>auf den Wert <b>True <\/b>ein. Auf diese Weise werden alle eingebauten Ribbon-Elemente ausgeblendet. Dann f&uuml;gen wir &uuml;ber die <b>Add<\/b>-Methode der <b>Tabs<\/b>-Auflistung von <b>objRibbon <\/b>ein neues <b>Tab<\/b>-Element hinzu und legen mit der Eigenschaft <b>Label <\/b>die Beschriftung <b>Kundenverwaltung <\/b>fest.<\/p>\n<p>Nun legen wir auf &auml;hnliche Weise ein <b>Group<\/b>-Element an und versehen es mit der &uuml;berschrift <b>&uuml;bersicht<\/b>. Dieses <b>Group<\/b>-Element erh&auml;lt nun zwei <b>Button<\/b>-Elemente, f&uuml;r die wir weiter oben bereits die Variablen <b>btnKundenuebersicht <\/b>und <b>btnBeenden <\/b>festgelegt haben.<\/p>\n<p>Diese f&uuml;gen wir mit der <b>Add<\/b>-Methode der <b>Controls<\/b>-Auflistung des <b>Group<\/b>-Elements hinzu.<\/p>\n<p>F&uuml;r das erste <b>Button<\/b>-Element legen wir direkt in der <b>Add<\/b>-Methode als Name <b>btnKundenuebersicht <\/b>fest. Danach tragen wir f&uuml;r die Eigenschaft <b>Label <\/b>den Wert <b>Kunden&uuml;bersicht<\/b>, f&uuml;r <b>Size <\/b>den Wert <b>msoRibbonControlSizeLarge <\/b>(f&uuml;r eine gro&szlig;e Schaltfl&auml;che) und f&uuml;r <b>Image <\/b>den Wert <b>users3<\/b> ein.<\/p>\n<p>Die Schritte f&uuml;r die zweite <b>Button<\/b>-Schaltfl&auml;che erfolgen analog, nur dass wir hier nat&uuml;rlich andere Eigenschaften angeben.<\/p>\n<p>Zwischen die beiden Schaltfl&auml;chen f&uuml;gen wir mit <b>.Con-trols.Add msoRibbonControlSeparator <\/b>noch eine Trennlinie ein. Nach dem Zusammenstellen der Ribbon-Definition ruft die Prozedur noch die Methode <b>CreateStartRibbon <\/b>des <b>Ribbons<\/b>-Objekts auf und &uuml;bergibt als Parameter <b>Main <\/b>als Name der Ribbon-Definition.<\/p>\n<h2>Bilder hinzuf&uuml;gen<\/h2>\n<p>Wir m&uuml;ssen noch die Bilder zur Datenbank hinzuf&uuml;gen, die im Ribbon als Icons angezeigt werden sollen. Dazu &ouml;ffnen Sie am einfachsten ein Formular in der Entwurfsansicht und klicken dann im Ribbon auf den Eintrag <b>Entwurf|Steuerelemente|Bild einf&uuml;gen|Durchsuchen&#8230; <\/b>Dies &ouml;ffnet einen <b>Grafik einf&uuml;gen<\/b>-Dialog, mit dem Sie die Bilder ausw&auml;hlen k&ouml;nnen. Diese sollten f&uuml;r gro&szlig;e Schaltfl&auml;chen 32&#215;32 Pixel gro&szlig; sein, f&uuml;r kleine Schaltfl&auml;chen 16&#215;16 Pixel. Wenn Sie auf diese Weise ein oder mehrere Bilder hinzugef&uuml;gt haben, sollten diese in der Liste unter <b>Bild einf&uuml;gen <\/b>im Ribbon zur Auswahl erscheinen (s. Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1091_005.png\" alt=\"Bilder f&uuml;r das Ribbon\" width=\"599,593\" height=\"237,9473\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Bilder f&uuml;r das Ribbon<\/span><\/b><\/p>\n<p>Die dort angegebenen Namen sollten mit den Namen &uuml;bereinstimmen, die Sie auch f&uuml;r die Eigenschaft <b>Image <\/b>des <b>Button<\/b>-Elements festgelegt haben.<\/p>\n<p>Nun stellen Sie noch den Namen des Anwendungsribbons ein, was wieder in den Access-Optionen geschieht. Damit der Name <b>Main <\/b>dort erscheint, m&uuml;ssen Sie jedoch einmal die soeben erstellte Methode <b>CreateRibbon <\/b>aufrufen.<\/p>\n<h2>Ribbon bereitstellen<\/h2>\n<p>Wenn Sie nun im Direktfenster einmalig die Methode <b>CreateRibbon <\/b>der Klasse <b>Startribbon <\/b>aufrufen, wird das Ribbon erstellt und ist danach in der Liste der Ribbons in den Access-Optionen verf&uuml;gbar (s. Bild 6):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1091_006.png\" alt=\"Einstellen des Anwendungsribbons\" width=\"649,559\" height=\"364,8916\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Einstellen des Anwendungsribbons<\/span><\/b><\/p>\n<pre>Startribbon.CreateRibbon<\/pre>\n<p>Im Direktfenster des VBA-Editors wird nun zur Kontrolle auch der Code der erstellten Ribbon-Definition ausgegeben.<\/p>\n<p>W&auml;hlen Sie den Eintrag <b>Main<\/b> in den Access-Optionen aus. Nun fehlt nur noch ein <b>AutoExec<\/b>-Makro, welches mit der Makroaktion <b>Ausf&uuml;hrenCode <\/b>und dem Parameter <b>RibbonLaden() <\/b>automatisch die Funktion <b>RibbonLaden <\/b>aufruft.<\/p>\n<p>Starten Sie dann die Datenbankanwendung neu, wird das Ribbon direkt angezeigt (s. Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1091_007.png\" alt=\"Startribbon\" width=\"424,7115\" height=\"190,4885\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Startribbon<\/span><\/b><\/p>\n<h2>Ereignisse der Schaltfl&auml;chen<\/h2>\n<p>Damit k&ouml;nnen wir die Ereignisse f&uuml;r die Ribbon-Buttons erstellen, die wie folgt aussehen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnKundenuebersicht_OnAction(control<span style=\"color:blue;\"> As <\/span> Office.IRibbonControl)\r\n     DoCmd.OpenForm \"frmKundenuebersicht\"\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>btnBeenden_OnAction(control<span style=\"color:blue;\"> As <\/span> Office.IRibbonControl)\r\n     DoCmd.Quit\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die erste Prozedur &ouml;ffnet das Formular <b>frmKundenuebersicht<\/b>, die zweite schlie&szlig;t die Anwendung. Die Ereignisprozeduren legen Sie an, indem Sie im VBA-Fenster f&uuml;r das Modul <b>StartRibbon <\/b>im linken Kombinationsfeld den Namen des <b>Button<\/b>-Elements ausw&auml;hlten, f&uuml;r das Sie die Ereignisprozedur definieren wollen. Die Prozeduren werden dann automatisch angelegt, sofern Sie die Objektvariablen, hier <b>btnKundenuebersicht <\/b>und <b>btnBeenden <\/b>mit dem Schl&uuml;sselwort <b>WithEvents <\/b>deklariert haben.<\/p>\n<p>Das Modul enth&auml;lt noch zwei weitere <b>Property Get<\/b>-Prozeduren, die aber nur etwa zum Aktivieren, Deaktivieren, Einblenden und Ausblenden oder zum Einstellen von <b>Button<\/b>-Eigenschaften von au&szlig;en ben&ouml;tigt werden. Dies ist hier nicht der Fall.<\/p>\n<h2>Ribbon f&uuml;r die Kunden&uuml;bersicht<\/h2>\n<p>Wenn Sie nun auf die Schaltfl&auml;che <b>Kunden&uuml;bersicht <\/b>klicken, erscheint im Arbeitsbereich das Formular <b>frmKundenuebersicht <\/b>mit den enthaltenen Datens&auml;tzen in der Datenblattansicht. Wir haben zus&auml;tzlich noch die Option <b>Navigationsbereich anzeigen <\/b>aus den Access-Optionen deaktiviert, damit nur noch Elemente der Anwendung erscheinen.<\/p>\n<p>Allerdings taucht nun nat&uuml;rlich noch kein benutzerdefiniertes Ribbon auf, sobald das Formular erscheint, sondern das in Zusammenhang mit der Anzeige von Objekten in der Datenblattansicht automatisch eingeblendete Ribbon-Tab <b>Datenblatt <\/b>(s. Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1091_008.png\" alt=\"Mit dem Datenblatt erscheint das entsprechende eingebaute Ribbon.\" width=\"649,559\" height=\"364,0839\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Mit dem Datenblatt erscheint das entsprechende eingebaute Ribbon.<\/span><\/b><\/p>\n<p>Hier wollen wir nun nat&uuml;rlich auch noch ein eigenes Ribbon einblenden. Dazu legen wir zun&auml;chst eine Ereignisprozedur f&uuml;r das Formular an, die durch das Ereignis <b>Beim Laden <\/b>ausgel&ouml;st wird.<\/p>\n<p>Diese enth&auml;lt nur eine einzige Anweisung, welche eine weitere Prozedur aufruft, die auch im Klassenmodul des Formulars implementiert wird &#8211; n&auml;mlich die Prozedur <b>CreateRibbon<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     CreateRibbon\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur <b>CreateRibbon <\/b>finden Sie in Listing 2. Sie stellt wiederum ein <b>Ribbon<\/b>&#8211; mit einem <b>Tab<\/b>&#8211; und einem <b>Group<\/b>-Element zusammen und f&uuml;gt diesem zun&auml;chst ein <b>Button<\/b>-Element hinzu, welches das ge&ouml;ffnete Formular wieder schlie&szlig;en soll. In diesem Fall sorgt die abschlie&szlig;ende Anweisung daf&uuml;r, dass das mit der Methode <b>Get-Ribbon <\/b>erstellte Ribbon namens <b>ribKundenuebersicht <\/b>direkt der Eigenschaft <b>RibbonName <\/b>des Formulars selbst zugeordnet wird. Dies entspricht dem Ausw&auml;hlen eines der Ribbons f&uuml;r die Eigenschaft <b>Name des Men&uuml;bands <\/b>des Formulars.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>CreateRibbon()\r\n     <span style=\"color:blue;\">Dim <\/span>objRibbon<span style=\"color:blue;\"> As <\/span>clsRibbon\r\n     <span style=\"color:blue;\">Dim <\/span>objTab<span style=\"color:blue;\"> As <\/span>clsTab\r\n     <span style=\"color:blue;\">Dim <\/span>objGroup<span style=\"color:blue;\"> As <\/span>clsGroup\r\n     <span style=\"color:blue;\">Set<\/span> objRibbon = Ribbons.Add(\"ribKundenuebersicht\")\r\n     <span style=\"color:blue;\">With<\/span> objRibbon\r\n         .StartFromScratch = <span style=\"color:blue;\">True<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> objTab = .Tabs.Add(\"tabKundenuebersicht\")\r\n         <span style=\"color:blue;\">With<\/span> objTab\r\n             .Label = \"Kunden&uuml;bersicht\"\r\n             <span style=\"color:blue;\">Set<\/span> objGroup = .Groups.Add(\"grpVerwalten\")\r\n             <span style=\"color:blue;\">With<\/span> objGroup\r\n                 .Label = \"Verwalten\"\r\n                 <span style=\"color:blue;\">Set<\/span> btnSchliessen = .Controls.Add(msoRibbonControlButton, \"btnSchliessen\")\r\n                 <span style=\"color:blue;\">With<\/span> btnSchliessen\r\n                     .Label = \"Schlie&szlig;en\"\r\n                     .Size = msoRibbonControlSizelarge\r\n                     .Image = \"close\"\r\n                 End <span style=\"color:blue;\">With<\/span>\r\n             End <span style=\"color:blue;\">With<\/span>\r\n         End <span style=\"color:blue;\">With<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     Me.RibbonName = Ribbons.GetRibbon(\"ribKundenuebersicht\")\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Code f&uuml;r das Ribbon des Formulars frmKundenuebersicht<\/span><\/b><\/p>\n<p>F&uuml;r dieses <b>Button<\/b>-Element deklarieren wir wieder eine Variable mit dem Schl&uuml;sselwort <b>WithEvents<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents btnSchliessen<span style=\"color:blue;\"> As <\/span>clsButton<\/pre>\n<p>Auch f&uuml;r dieses legen wir wieder eine Ereignisprozedur wie die folgende an. In diesem Fall soll das Formular geschlossen werden:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnSchliessen_OnAction( control<span style=\"color:blue;\"> As <\/span>Office.IRibbonControl)\r\n     DoCmd.Close acForm, Me.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit wir auf die Eigenschaften dieser Schaltfl&auml;che zugreifen k&ouml;nnen, legen wir wieder eine &ouml;ffentliche <b>Property Get<\/b>-Methode fest, mit der die Schaltfl&auml;che von au&szlig;en zugreifbar ist:<\/p>\n<pre><span style=\"color:blue;\">Public Property Get <\/span>Schliessen()<span style=\"color:blue;\"> As <\/span>clsButton\r\n     <span style=\"color:blue;\">Set<\/span> Schliessen = btnSchliessen\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<p>Wenn Sie nun das Formular mit der Schaltfl&auml;che <b>Kunden&uuml;bersicht <\/b>des Hauptribbons &ouml;ffnen, wird direkt das dort definierte Ribbon eingeblendet. Das Ribbon-Tab <b>Datenblatt <\/b>bleibt rechts daneben verf&uuml;gbar, was auch sinnvoll ist (s. Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1091_009.png\" alt=\"Das Formular-Ribbon in Aktion\" width=\"549,6265\" height=\"260,1566\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Das Formular-Ribbon in Aktion<\/span><\/b><\/p>\n<p>Wie Sie sehen, konnten Sie dieses Ribbon direkt beim &ouml;ffnen des Formulars als Formularribbon anzeigen &#8211; die Anwendung muss hier also nicht erst geschlossen und erneut ge&ouml;ffnet werden, wie es bei dem Ribbon der Fall ist, das als Anwendungsribbon gleich nach dem Start der Anwendung eingeblendet werden soll. Hier reicht es aber auch aus, wenn Sie das Anwendungsribbon einmal angelegt und die Anwendung geschlossen und wieder ge&ouml;ffnet haben &#8211; sobald der Eintrag in der Liste der verf&uuml;gbaren Ribbons vorliegt, k&ouml;nnen Sie ein Ribbon unter diesem Namen beliebig zusammenstellen.<\/p>\n<h2>Weitere Schaltfl&auml;chen hinzuf&uuml;gen<\/h2>\n<p>Nun wollen wir unserem Ribbon weitere Schaltfl&auml;chen hinzuf&uuml;gen, und zwar f&uuml;r folgende Funktionen:<\/p>\n<ul>\n<li>Anlegen eines neuen Kunden<\/li>\n<li>Bearbeiten des aktuell markierten Kunden<\/li>\n<li>L&ouml;schen des aktuell markierten Kunden<\/li>\n<\/ul>\n<p>Dazu f&uuml;gen wir dem Klassenmodul des Formulars zun&auml;chst die entsprechenden Objektvariablen f&uuml;r die zu erstellenden Schaltfl&auml;chen zu:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents btnNeuerKunde<span style=\"color:blue;\"> As <\/span>clsButton\r\n<span style=\"color:blue;\">Dim <\/span>WithEvents btnKundeBearbeiten<span style=\"color:blue;\"> As <\/span>clsButton\r\n<span style=\"color:blue;\">Dim <\/span>WithEvents btnKundeLoeschen<span style=\"color:blue;\"> As <\/span>clsButton<\/pre>\n<p>Dann erweitern wir den mittleren Teil der Prozedur <b>CreateRibbon <\/b>um die entsprechenden Anweisungen. Zuvor f&uuml;gen Sie, sofern verf&uuml;gbar, noch die f&uuml;r die neuen Schaltfl&auml;chen ben&ouml;tigten Bilddateien zur Anwendung hinzu (wie dies gelingt, haben wir bereits weiter oben gezeigt). Danach tragen Sie unterhalb der folgenden Anweisungen den Code zum Erstellen weiterer Schaltfl&auml;chen ein:<\/p>\n<pre><span style=\"color:blue;\">With<\/span> objGroup\r\n     .Label = \"Verwalten\"\r\n     ...<\/pre>\n<p>Der Code f&uuml;r die erste Schaltfl&auml;che sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> btnNeuerKunde = .Controls.Add( msoRibbonControlButton, \"btnNeuerKunde\")\r\n<span style=\"color:blue;\">With<\/span> btnNeuerKunde\r\n     .Label = \"Neuer Kunde\"\r\n     .Size = msoRibbonControlSizelarge\r\n     .Image = \"user_add\"\r\nEnd <span style=\"color:blue;\">With<\/span><\/pre>\n<p>Und ist der Code zum Anlegen der weiteren beiden Schaltfl&auml;chen:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> btnKundeBearbeiten = .Controls.Add( msoRibbonControlButton, \"btnKundeBearbeiten\")\r\n<span style=\"color:blue;\">With<\/span> btnKundeBearbeiten\r\n     .Label = \"Kunde bearbeiten\"\r\n     .Size = msoRibbonControlSizelarge\r\n     .Image = \"user_edit\"\r\nEnd <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">Set<\/span> btnKundeLoeschen = .Controls.Add( msoRibbonControlButton, \"btnKundeLoeschen\")\r\n<span style=\"color:blue;\">With<\/span> btnKundeLoeschen\r\n     .Label = \"Kunde l&ouml;schen\"\r\n     .Size = msoRibbonControlSizelarge\r\n     .Image = \"user_delete\"\r\nEnd <span style=\"color:blue;\">With<\/span><\/pre>\n<p>F&uuml;r die drei Schaltfl&auml;chen k&ouml;nnen Sie nun &uuml;ber die beiden Kombinationsfelder im Kopf des Codefensters des Moduls <b>Form_frmKundenuebersicht <\/b>Ereignisprozeduren anlegen und mit Code f&uuml;llen. Die Details dazu schauen wir uns im zweiten Teil der Beitragsreihe an. Das Formular schaut nun wie in Bild 10 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1091_010.png\" alt=\"Formularribbon mit drei Schaltfl&auml;chen\" width=\"549,6265\" height=\"235,2788\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Formularribbon mit drei Schaltfl&auml;chen<\/span><\/b><\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Beitrag hat den Grundstein f&uuml;r eine kleine Anwendung gelegt, die mit einem Ribbon daherkommt und die Verwaltung der Adressdaten von Kunden erlaubt. Der Clou dabei ist, dass wir nicht die &uuml;blicherweise verwendeten Techniken zum Anlegen des zur Navigation genutzten Ribbons einsetzen, sondern eine Reihe von Klassen, die das Programmieren des Ribbons allein mit VBA erlaubt. Das bedeutet zun&auml;chst, dass Sie sich nicht wie &uuml;blich mit der Tabelle <b>USysRibbons <\/b>und der manuellen Definition von Ribbons herumschlagen m&uuml;ssen, sondern alles komplett objektorientiert per VBA erledigen k&ouml;nnen.<\/p>\n<p>Ein weiterer sch&ouml;ner Vorteil hierbei ist, dass Sie die &auml;nderungen, die Sie in der VBA-gesteuerten Erstellung des Ribbons vornehmen, schon beim n&auml;chsten &ouml;ffnen des Formulars <b>frmKundenuebersicht<\/b> vorfinden.<\/p>\n<p>Im folgenden Teil der Beitragsreihe in der n&auml;chsten Ausgabe beschreiben wir, wie Sie die drei Schaltfl&auml;chen zum Verwalten von Kunden mit Leben f&uuml;llen und &#8211; wer wei&szlig; &#8211; vielleicht gibt es dann schon weitere Steuer-elemente, die Sie mit unseren Ribbon-Klassen f&uuml;llen k&ouml;nnen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>RibbonAnwendung.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/2B778125-4A95-4E71-81E5-0A985084BFB4\/aiu_1091.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Beitrag &#8222;Ribbonklassen&#8220; haben wir gezeigt, wie Sie das Ribbon allein mit VBA-Code definieren k&ouml;nnen. Nun wollen wir diese Technik in einer kleinen Beispielanwendung demonstrieren, in der wir eine Adressenliste in einem Formular anzeigen und alle Befehle zu dieser Adressenliste im Ribbon einbauen &#8211; also etwa, um einen neuen Datensatz anzulegen, einen bestehenden Datensatz zu l&ouml;schen oder die Details zu einem Datensatz anzuzeigen.<\/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":[662017,66032017,44000027],"tags":[],"class_list":["post-55001091","post","type-post","status-publish","format-standard","hentry","category-662017","category-66032017","category-Loesungen"],"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>Kundenverwaltung mit Ribbon, Teil I - 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\/Kundenverwaltung_mit_Ribbon_Teil_I\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kundenverwaltung mit Ribbon, Teil I\" \/>\n<meta property=\"og:description\" content=\"Im Beitrag &quot;Ribbonklassen&quot; haben wir gezeigt, wie Sie das Ribbon allein mit VBA-Code definieren k&ouml;nnen. Nun wollen wir diese Technik in einer kleinen Beispielanwendung demonstrieren, in der wir eine Adressenliste in einem Formular anzeigen und alle Befehle zu dieser Adressenliste im Ribbon einbauen - also etwa, um einen neuen Datensatz anzulegen, einen bestehenden Datensatz zu l&ouml;schen oder die Details zu einem Datensatz anzuzeigen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-14T13:43:05+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/b9e2791a80bd4fedb16b91376200aa1b\" \/>\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\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Kundenverwaltung mit Ribbon, Teil I\",\"datePublished\":\"2020-05-14T13:43:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/\"},\"wordCount\":2437,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b9e2791a80bd4fedb16b91376200aa1b\",\"articleSection\":[\"2017\",\"3\\\/2017\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/\",\"name\":\"Kundenverwaltung mit Ribbon, Teil I - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b9e2791a80bd4fedb16b91376200aa1b\",\"datePublished\":\"2020-05-14T13:43:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b9e2791a80bd4fedb16b91376200aa1b\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b9e2791a80bd4fedb16b91376200aa1b\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kundenverwaltung_mit_Ribbon_Teil_I\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kundenverwaltung mit Ribbon, Teil I\"}]},{\"@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":"Kundenverwaltung mit Ribbon, Teil I - 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\/Kundenverwaltung_mit_Ribbon_Teil_I\/","og_locale":"de_DE","og_type":"article","og_title":"Kundenverwaltung mit Ribbon, Teil I","og_description":"Im Beitrag \"Ribbonklassen\" haben wir gezeigt, wie Sie das Ribbon allein mit VBA-Code definieren k&ouml;nnen. Nun wollen wir diese Technik in einer kleinen Beispielanwendung demonstrieren, in der wir eine Adressenliste in einem Formular anzeigen und alle Befehle zu dieser Adressenliste im Ribbon einbauen - also etwa, um einen neuen Datensatz anzulegen, einen bestehenden Datensatz zu l&ouml;schen oder die Details zu einem Datensatz anzuzeigen.","og_url":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-14T13:43:05+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/b9e2791a80bd4fedb16b91376200aa1b","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\/Kundenverwaltung_mit_Ribbon_Teil_I\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Kundenverwaltung mit Ribbon, Teil I","datePublished":"2020-05-14T13:43:05+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/"},"wordCount":2437,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/b9e2791a80bd4fedb16b91376200aa1b","articleSection":["2017","3\/2017","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/","url":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/","name":"Kundenverwaltung mit Ribbon, Teil I - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/b9e2791a80bd4fedb16b91376200aa1b","datePublished":"2020-05-14T13:43:05+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/b9e2791a80bd4fedb16b91376200aa1b","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/b9e2791a80bd4fedb16b91376200aa1b"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Kundenverwaltung_mit_Ribbon_Teil_I\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Kundenverwaltung mit Ribbon, Teil I"}]},{"@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\/55001091","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=55001091"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001091\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001091"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001091"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}