{"id":55000116,"date":"2003-08-01T00:00:00","date_gmt":"2020-05-06T15:17:28","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=116"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Dynamische_Menues_mit_VBA","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/","title":{"rendered":"Dynamische Men&uuml;s mit VBA"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/74dc26eda6e343fa8815be85bdf4264c\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Andr&eacute; Minhorst, Duisburg<\/b><\/p>\n<p><b>Men&uuml;s sind &#8211; ergonomisch betrachtet &#8211; das Salz in der Suppe beim Benutzen von Softwareprodukten. Viele Anwendungen bieten mehrere M&ouml;glichkeiten, bestimmte Funktionen aufzurufen &#8211; innerhalb von Elementen der Benutzeroberfl&auml;che, per Tastatur oder eben in Men&uuml;s. Letztere haben einen Vorteil: Sie sind eigentlich immer pr&auml;sent (wenn sie nicht gerade kontextsensitiv sind) und geben dem Anwender daher die M&ouml;glichkeit, sich gut an sie zu gew&ouml;hnen. Im vorliegenden Beitrag erfahren Sie, wie Sie Ihre mit Access erstellten Anwendungen mit benutzerdefinierten Men&uuml;s ausstatten. Dabei liegt der Schwerpunkt nicht auf dem Zusammensetzen von Men&uuml;s per Anpassen-Dialog oder per Makro, sondern auf der flexibelsten Art und Weise: mit VBA. <\/b><\/p>\n<p>Men&uuml;s sind eine Funktion von Office und nicht nur von Access. Sie k&ouml;nnen Men&uuml;s &uuml;ber die Benutzeroberfl&auml;che von Access hinzuf&uuml;gen, anpassen und wieder entfernen oder VBA verwenden.<\/p>\n<p>Die Anpassung eingebauter oder benutzerdefinierter Men&uuml;s unter Verwendung der Benutzeroberfl&auml;che wird im vorliegenden Beitrag nicht behandelt. Damit k&ouml;nnen Sie lediglich statisch f&uuml;r zus&auml;tzlichen Komfort sorgen, die Men&uuml;s w&uuml;rden sich aber nicht dynamisch an die jeweiligen Anforderungen anpassen. Daher lernen Sie im vorliegenden Beitrag, wie Sie Men&uuml;s mit VBA steuern k&ouml;nnen.<\/p>\n<h3>Hinweis<\/h3>\n<p>Wie immer, wenn ein bestimmtes Vorhaben mit VBA erreicht werden soll, sind gewisse grundlegende Kenntnisse hilfreich. Auch wenn Sie noch nie mit Men&uuml;s gearbeitet haben, ist die diesbez&uuml;gliche Lekt&uuml;re der Onlinehilfe von Access sicher ein guter Ansatz.<\/p>\n<p>Zum Anzeigen und Steuern benutzerdefinierter Men&uuml;s enth&auml;lt Office eine Bibliothek mit geeigneten Objekten, Methoden und Eigenschaften. Damit k&ouml;nnen Sie Men&uuml;s bei Bedarf anzeigen und wieder entfernen sowie einzelne Elemente aktivieren und deaktivieren.<\/p>\n<p>In den folgenden Kapiteln finden Sie zun&auml;chst einige grundlegende Informationen zu den in der Bibliothek enthaltenen Objekten. Anschlie&szlig;end erfahren Sie, welche Schritte zum Anlegen und Anpassen der einzelnen Men&uuml;elemente erforderlich sind. Dabei verwenden Sie spezielle Funktionen, die das Anlegen der Men&uuml;elemente vereinfachen.<\/p>\n<p>Der Schwerpunkt der vorgestellten Funktionen liegt darin, eine herk&ouml;mmliche Access-Datenbank in eine Anwendung umzuwandeln, die men&uuml;technisch v&ouml;llig eigenst&auml;ndig ist und nur noch eines oder mehrere benutzerdefinierte Men&uuml;s f&uuml;r den Aufruf der ben&ouml;tigten Befehle zur Verf&uuml;gung stellt.<\/p>\n<p>Schlie&szlig;lich m&ouml;chten Sie den Endbenutzer nicht mit all den Access-spezifischen Men&uuml;s und Symbolleisten verwirren, sondern ihm nur die in Zusammenhang mit der Anwendung erforderlichen Elemente zur Verf&uuml;gung stellen.<\/p>\n<p><IMG height=\"179\" src=\"..\/fileadmin\/_temp_\/{73D2297A-0C39-4C4A-88D4-1B46392927A6}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Men&uuml;leiste f&uuml;r die Adressverwaltung<\/span><\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Als Beispiel f&uuml;r die Anwendung VBA-gesteuerter Men&uuml;s dient die Musterl&ouml;sung Adressverwaltung mit Outlook-Schnittstelle der vorliegenden Ausgabe von Access im Unternehmen. Sie finden die hier vorgestellten Funktionen zum Steuern von Men&uuml;s in den entsprechenden Datenbanken in den Versionen f&uuml;r Access 97 (Adressverwaltung97.mdb) und Access 2000 (Adressverwaltung2000.mdb). <\/p>\n<p>Die Beispielanwendung soll eine Men&uuml;leiste mit folgenden Funktionen erhalten:<\/p>\n<li>Beenden der Anwendung<\/li>\n<li>Anzeigen der Stammdaten f&uuml;r Personen und Unternehmen<\/li>\n<li>Anzeige des Suchformulars<\/li>\n<li>Schnellsuche per Kombinationsfeld<\/li>\n<li>Schaltfl&auml;chen zum Drucken, die ggf. aktiviert und deaktiviert werden<\/li>\n<li>Export und Import von Adressen<\/li>\n<p>Die fertige Men&uuml;leiste soll wie in Bild 1 aussehen. <\/p>\n<h3>Hinweis<\/h3>\n<p>Weitere Informationen zu den jeweiligen Funktionen zum Erstellen der Men&uuml;elemente erhalten Sie in Kapitel 5. <\/p>\n<p>Im Englischen hei&szlig;t der Oberbegriff f&uuml;r alle Men&uuml;leisten Command Bars. Dieser Begriff fasst die drei Arten von Men&uuml;leisten zusammen: Standard Menus (Men&uuml;leisten), Toolbars (Symbolleisten) und Shortcut Menus (Kontextmen&uuml;s).<\/p>\n<h3>Hinweis<\/h3>\n<p>Die Beschreibung des gesamten Objektmodells der Men&uuml;s w&uuml;rde vermutlich mehrere Hefte f&uuml;llen. Daher werden nachfolgend nur Men&uuml;leisten beschrieben &#8211; die anderen Men&uuml;arten folgen ggf. in einer der n&auml;chsten Ausgaben von Access im Unternehmen. <\/p>\n<p>Men&uuml;s lassen sich mit einem relativ einfachen Objektmodell beschreiben. Das Objektmodell umfasst zwei Auflistungen: CommandBars und CommandBarControls. Die Auflistung CommandBars enth&auml;lt alle vorhandenen eingebauten und benutzerdefinierten Men&uuml;s. Jedes dieser CommandBar-Objekte enth&auml;lt eine CommandBarControls-Auflistung mit den Elementen des jeweiligen Men&uuml;s.<\/p>\n<p>Diese Elemente gibt es wiederum in drei Ausf&uuml;hrungen:<\/p>\n<li>CommandBarControlButton: Schaltfl&auml;che, die eine Aktion ausl&ouml;sen kann<\/li>\n<pre>Public Function MenuesAuflisten()\r\n    Dim cbr As CommandBar\r\n    For Each cbr In Application.CommandBars\r\n        Debug.Print cbr.Name, cbr.NameLocal, cbr.Type, _            cbr.Position, cbr.BuiltIn\r\n    Next cbr\r\nEnd Function<\/pre>\n<p><b>Quellcode 1<\/b><\/p>\n<pre>Public Function MenuesUndElementeAuflisten()\r\n    Dim cbr As CommandBar\r\n    Dim cbc As CommandBarControl\r\n    For Each cbr In Application.CommandBars\r\n        Debug.Print cbr.NameLocal\r\n        For Each cbc In cbr.Controls\r\n            Debug.Print cbc.Caption\r\n            If cbc.Type = msoControlPopup Then\r\n                ElementeAuflisten cbc, 1, \"  \"\r\n            End If\r\n        Next cbc\r\n    Next cbr\r\nEnd Function\r\nPublic Function ElementeAuflisten(cbp As _    CommandBarPopup, Ebene As Integer, _    Leerraum As String)\r\n    Dim cbc As CommandBarControl\r\n    For Each cbc In cbp.CommandBar.Controls\r\n        Debug.Print Leerraum & cbc.Caption\r\n        If cbc.Type = msoControlPopup Then\r\n            ElementeAuflisten cbc.Control, _            Ebene + 1, Leerraum & \"  \"\r\n        End If\r\n    Next cbc\r\nEnd Function<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<li>CommandBarControlComboBox: Kombinationsfeld zur Auswahl eines Eintrags<\/li>\n<li>CommandBarControlPopup: Container f&uuml;r weitere Elemente<\/li>\n<p>Wenn Sie hierarchische Men&uuml;strukturen verwenden m&ouml;chten, ben&ouml;tigen Sie jeweils ein CommandBarControl des Typs CommandBarControlComboBox f&uuml;r jedes weitere Untermen&uuml;. Mit den folgenden Funktionen zum Anzeigen von Men&uuml;s und deren Eintr&auml;gen lernen Sie die grundlegenden Objekte und einige ihrer Eigenschaften kennen.<\/p>\n<h2>Anzeigen aller Men&uuml;s<\/h2>\n<p>Die Funktion aus Quellcode 1 listet alle aktuell vorhandenen Men&uuml;s auf. Dabei gibt sie die Eigenschaften Name, NameLocal, Type, Position und BuiltIn aus. Dazu verwendet sie ein Commandbar-Objekt namens cbr, dem sie in einer For Each-Schleife nacheinander alle Elemente der Commandbars-Auflistung der Anwendung zuweist. <\/p>\n<p>Die in den Eigenschaften enthaltenen Informationen werden in Tab. 1 beschrieben.<\/p>\n<h2>Anzeigen aller Elemente eines Men&uuml;s<\/h2>\n<p>Zur Anzeige aller Elemente eines Men&uuml;s verwenden Sie die beiden Funktionen aus Quellcode 2. Da bestimmte Elemente eines Men&uuml;s durchaus weitere Unterelemente enthalten k&ouml;nnen, verwenden Sie hier zwei Funktionen, von denen sich die eine bei Bedarf selbst aufruft und dadurch f&uuml;r eine rekursive Auflistung aller Men&uuml;elemente sorgt.<\/p>\n<p>Die Auflistung erfolgt durch zwei ineinander verschachtelte For Each-Schleifen. Die &auml;u&szlig;ere Schleife durchl&auml;uft alle CommandBar-Objekte der CommandBars-Auflistung, die innere alle CommandBarControl-Objekte der Controls-Auflistung des aktuellen CommandBar-Objektes.<\/p>\n<p>Dabei kontrolliert die Funktion, ob die Eigenschaft Type des CommandBarControl-Objektes den Wert msoControlPopup hat. Falls ja, handelt es sich um ein Objekt, das weitere Elemente enthalten kann, und die rekursive Funktion ElementeAuflisten wird aufgerufen.<\/p>\n<pre>Public Sub AlleMenueleistenAusblenden()\r\n    Dim cbr As Object\r\n    For Each cbr In Application.CommandBars\r\n        If cbr.Visible = True And _            cbr.Name &lt;&gt; \"menu bar\" Then\r\n            cbr.Visible = False\r\n        End If\r\n    Next cbr\r\nEnd Sub<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<p>In jeder Ebene wird die Beschriftung der jeweiligen Steuerelemente ausgegeben, wobei die Ausgabe je Ebene um zwei Leerzeichen weiter einger&uuml;ckt wird.<\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Eigenschaft<\/b><\/p>\n<\/td>\n<td>\n<p><b>Inhalt<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Name<\/p>\n<\/td>\n<td>\n<p>Englischer Name<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>NameLocal<\/p>\n<\/td>\n<td>\n<p>Angezeigter Name, sprachabh&auml;ngig<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Type<\/p>\n<\/td>\n<td>\n<p>Art des Men&uuml;s: msoBarTypeMenuBar, msoBarTypeNormal, msoBarTypeNormal<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Position<\/p>\n<\/td>\n<td>\n<p>Position des Men&uuml;s, Beispiele: msoBarMenuBar, msoBarPopup, msoBarTop, msoBarFloating<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>BuiltIn<\/p>\n<\/td>\n<td>\n<p>True: eingebautes Men&uuml;, False: benutzerdefiniertes Men&uuml;<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 1: Eigenschaften und ihre Inhalte<\/b><\/p>\n<p>Access speichert die Informationen &uuml;ber Men&uuml;s an verschiedenen Orten. Nimmt ein Benutzer &auml;nderungen an eingebauten Men&uuml;s vor, werden diese &auml;nderungen in der Registry gespeichert &#8211; und zwar in dem f&uuml;r diesen Benutzer vorgesehenen Bereich. Informationen &uuml;ber neue Men&uuml;s werden teils in der Datenbank und teils in der Registry gespeichert, Informationen &uuml;ber den Aufbau der benutzerdefinierten Men&uuml;s dagegen nur in der Datenbank. Lediglich Informationen &uuml;ber die Anzeigeart werden benutzerabh&auml;ngig in der Registry abgelegt.<\/p>\n<p><!--30percent--><\/p>\n<p>Das Anlegen, Bearbeiten und L&ouml;schen von Men&uuml;s und Men&uuml;elementen per VBA ist eine Abfolge einiger weniger, immer wiederkehrender Operationen. So brauchen Sie beispielsweise zum Anlegen von Schaltfl&auml;chen f&uuml;r einen Men&uuml;punkt immer wieder die gleichen Anweisungen. Daher lernen Sie in den folgenden Abschnitten einige Funktionen kennen, die zur Durchf&uuml;hrung der gew&uuml;nschten Schritte dienen und die nur noch die &uuml;bergabe der entsprechenden Parameter beim Funktionsaufruf erfordern.<\/p>\n<h2>Men&uuml;s ausblenden<\/h2>\n<p>Wenn sichergestellt ist, dass Ihre neu erstellte Men&uuml;leiste alle f&uuml;r die Anwendung der Datenbank notwendigen Befehle enth&auml;lt, k&ouml;nnen Sie alle anderen Men&uuml;s ausblenden. Diese Aufgabe nimmt Ihnen die Funktion aus Quellcode 3 ab. Sie durchl&auml;uft alle Men&uuml;leisten der aktuellen Anwendung und stellt deren Eigenschaft Visible auf den Wert False. Die einzige Ausnahme ist die Men&uuml;leiste menu bar, die allerdings sp&auml;ter durch die neu erstellte Men&uuml;leiste ersetzt wird.<\/p>\n<h2>Anlegen eines Men&uuml;s<\/h2>\n<p>Das Anlegen eines Men&uuml;s erfolgt mit der Methode Add der Commandbars-Auflistung. Den Aufruf dieser Methode vereinfacht die Funktion aus Quellcode 4, der Sie beim Aufruf drei Parameter &uuml;bergeben: den Namen der zu erstellenden Men&uuml;leiste, die Startposition und die Angabe, ob das Men&uuml; als Men&uuml;leiste verwendet werden soll.<\/p>\n<p>Die Funktion dient als so genannter Wrapper f&uuml;r den eigentlichen Befehl f&uuml;r das Anlegen eines neuen Men&uuml;s. Ein Wrapper ist eine Art Schnittstelle, mit der die eigentliche Funktion umh&uuml;llt und entweder deren Aufruf vereinfacht oder mit zus&auml;tzlichen Funktionen versehen wird. Hier wird dem Aufruf z. B. eine Fehlerbehandlung hinzugef&uuml;gt. Die Funktion gibt beim Auftreten eines Fehlers den Wert False zur&uuml;ck.<\/p>\n<pre>Public Function MenueleisteErstellen(Menueleistenname _    As String, Menueposition As Integer, _    Menueleiste As Boolean)\r\n    On Error Resume Next\r\n    Dim cbr As CommandBar\r\n    Set cbr = CommandBars.Add(Menueleistenname, _        Position:=Menueposition, MenuBar:=Menueleiste)\r\n    If Err.Number &gt; 0 Then\r\n        MenueleisteErstellen = False\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<pre>Public Function MenueeintragErstellen(cbr As _    CommandBar, Beschriftung As String, Bezeichnung _    As String, Aktion As String, NeueGruppe As Boolean)\r\n    Dim cbc As CommandBarControl\r\n    Set cbc = cbr.Controls.Add(Type:=1)\r\n    cbc.Style = 2\r\n    cbc.Caption = Beschriftung\r\n    cbc.OnAction = Aktion\r\n    cbc.Tag = Bezeichnung\r\n    cbc.BeginGroup = NeueGruppe\r\nEnd Function<\/pre>\n<p><b>Quellcode 5<\/b><\/p>\n<pre>MenueeintragErstellen _    Application.Commandbars(\"Adressverwaltung\"), _    \"&Detailsuche\", \"Detailsuche\", \"=Detailsuche()\", _    False<\/pre>\n<p><b>Quellcode 6<\/b><\/p>\n<p>Mit dem folgenden Aufruf der Funktion aus Quellcode 5 erstellen Sie beispielsweise eine neue Men&uuml;leiste namens Adressverwaltung, die anstelle der bisherigen Men&uuml;leiste angelegt wird.<\/p>\n<pre>MenueleisteErstellen _    \"Adressverwaltung\", msoBarTop, True<\/pre>\n<h3>Praxis-Tipp<\/h3>\n<p>Die Parameter f&uuml;r Methoden wie die Add-Methode der Commandbars-Auflistung und andere finden Sie z. B. im Objektkatalog von Access, weitere Informationen hierzu im Beitrag Tipps und Tricks zum Programmieren in der vorliegenden Ausgabe. Dort erhalten Sie au&szlig;erdem eine Erl&auml;uterung der Funktion von Wrappern. <\/p>\n<h2>Anlegen eines Eintrags in der Men&uuml;leiste<\/h2>\n<p>Zum Anlegen eines Steuerelements in einem Men&uuml; dient ebenfalls die Methode Add &#8211; allerdings nicht die der Commandbars-, sondern der CommandbarControls-Auflistung.<\/p>\n<p>Die Add-Methode sowie die Zuweisung der ben&ouml;tigten Eigenschaften des Steuerelements werden wiederum durch einen Wrapper gekapselt.<\/p>\n<p>Mit dem Parameter cbr &uuml;bergeben Sie einen Verweis auf die Men&uuml;leiste, in der der Eintrag angelegt werden soll, z. B. mit folgendem Ausdruck:<\/p>\n<pre>Application.Commandbars(&lt;Men&uuml;name&gt;)<\/pre>\n<p>Mit den Parametern Beschriftung und Bezeichnung &uuml;bergeben Sie die jeweiligen Zeichenketten. Der Wert f&uuml;r Aktion gibt den Namen der beim Aktivieren des Steuerelements aufzurufenden Funktion an.<\/p>\n<p>Mit NeueGruppe geben Sie an, ob der neue Eintrag durch einen Querstrich optisch von den vorhandenen Eintr&auml;gen abgetrennt werden soll. Der Parameter kann die Werte True und False annehmen.<\/p>\n<pre>Public Function UntermenueErstellen(cbr As CommandBar, Beschriftung As String, _    Bezeichnung As String, NeueGruppe As Boolean)\r\n    Dim cbc As CommandBarControl\r\n    Set cbc = cbr.Controls.Add(Type:=msoControlPopup)\r\n    cbc.Caption = Beschriftung\r\n    cbc.Tag = Bezeichnung\r\n    cbc.BeginGroup = NeueGruppe\r\nEnd Function<\/pre>\n<p><b>Quellcode 7<\/b><\/p>\n<pre>UntermenueErstellen Application.Commandbars(\"Adressverwaltung\"), \"&Datei\", _    \"Datei\", False<\/pre>\n<p><b>Quellcode 8<\/b><\/p>\n<pre>Public Function UntermenueeintragErstellen(cbr As CommandBarControl, Stil As _    Integer, Beschriftung As String, Bezeichnung As String, Aktion As String, _    NeueGruppe As Boolean, Optional Symbol As Variant)\r\n    Dim cbc As CommandBarControl\r\n    Set cbc = cbr.Controls.Add(Type:=msoControlButton)\r\n    cbc.Caption = Beschriftung\r\n    cbc.OnAction = Aktion\r\n    cbc.Tag = Bezeichnung\r\n    cbc.BeginGroup = NeueGruppe\r\n    If Not IsMissing(Symbol) Then\r\n        cbc.FaceId = Symbol\r\n        cbc.Style = Stil\r\n    Else\r\n        cbc.Style = msoButtonCaption\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 9<\/b><\/p>\n<p>Wenn Sie bereits eine Men&uuml;leiste namens Adressverwaltung angelegt haben, k&ouml;nnen Sie der Men&uuml;leiste mit der folgenden Anweisung aus Quellcode 6 einen Eintrag hinzuf&uuml;gen.<\/p>\n<\/p>\n<h2>Anlegen eines Untermen&uuml;s<\/h2>\n<p>&uuml;ber ein Untermen&uuml; k&ouml;nnen Sie von der Men&uuml;leiste aus weitere Men&uuml;punkte erreichen. Ein Untermen&uuml; kann selbst Men&uuml;eintr&auml;ge, weitere Untermen&uuml;s und andere Steuerelemente beinhalten. Zum Anlegen eines Untermen&uuml;s verwenden Sie die Funktion aus Quellcode 7.<\/p>\n<p>Die Parameter der Funktion wurden bereits alle bei der Beschreibung der Funktion MenueeintragErstellen beschrieben (s. Abschnitt 5.3). Die Funktion hat einige Parameter weniger als die dort beschriebene Funktion, da durch das Aufklappen eines Untermen&uuml;s beispielsweise keine Aktion ausgel&ouml;st wird und diese Men&uuml;s in der Regel auch keine Symbole verwenden.<\/p>\n<p>Das Anlegen eines Untermen&uuml;s kann beispielsweise durch den Funktionsaufruf aus Quellcode 8 erfolgen. Der Aufruf aus Quellcode 10 legt in der Men&uuml;leiste ein Untermen&uuml; mit der Bezeichnung &#038;Datei an.<\/p>\n<pre>UntermenueeintragErstellen Application.Commandbars(\"Adressverwaltung\"). _    Controls(\"&Datei\"), msoButtonIconAndCaption, \"D&rucken\", \"Drucken\", _    \"=Drucken()\", False, 4<\/pre>\n<p><b>Quellcode 10<\/b><\/p>\n<pre>Public Function MenuepunktAktivieren(cbc As CommandBarControl)\r\n    cbc.Enabled = True\r\nEnd Function\r\nPublic Function MenuepunktDeaktivieren(cbc As CommandBarControl)\r\n    cbc.Enabled = False\r\nEnd Function<\/pre>\n<p><b>Quellcode 11<\/b><\/p>\n<pre>MenuepunktAktivieren Application.Commandbars(\"Adressverwaltung\"). _    Controls(\"&Datei\").Controls(\"D&rucken\")<\/pre>\n<p><b>Quellcode 12<\/b><\/p>\n<h2>Anlegen eines Eintrags in einem Untermen&uuml;<\/h2>\n<p>Das Anlegen eines Eintrags in einem Untermen&uuml; (s. Quellcode 9) unterscheidet sich dadurch von dem gleichen Vorgang in der Men&uuml;leiste, dass hier unterschiedliche Stile und damit neben der eigentlichen Beschriftung auch Symbole verwendet werden k&ouml;nnen. Dementsprechend hat die Wrapperfunktion zwei zus&auml;tzliche Eigenschaften, n&auml;mlich Stil und Symbol.<\/p>\n<p>Der Parameter Stil kann unter anderen die Werte aus Tab. 2 annehmen. Mit dem Parameter Symbol &uuml;bergeben Sie der Funktion eine ID f&uuml;r eines der eingebauten Symbole.<\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Konstante<\/b><\/p>\n<\/td>\n<td>\n<p><b>Zahlenwert<\/b><\/p>\n<\/td>\n<td>\n<p><b>Beschreibung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>msoButtonCaption<\/p>\n<\/td>\n<td>\n<p>1<\/p>\n<\/td>\n<td>\n<p>Nur Beschriftung<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>msoButtonIcon<\/p>\n<\/td>\n<td>\n<p>2<\/p>\n<\/td>\n<td>\n<p>Nur Symbol<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>msoButtonIconAndCaption<\/p>\n<\/td>\n<td>\n<p>3<\/p>\n<\/td>\n<td>\n<p>Beschriftung und Symbol<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 2: Werte der Eigenschaft Style<\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Wenn Sie die Datenbank Faces97.mdb bzw. Faces2000.mdb, die sich auf der Heft-CD befinden, &ouml;ffnen, finden Sie eine &uuml;bersicht &uuml;ber alle vorhandenen Symbole. Die ID des gew&uuml;nschten Symbols erhalten Sie, wenn Sie mit dem Mauszeiger &uuml;ber das jeweilige Symbol fahren. <\/p>\n<p>Den Aufruf der Funktion k&ouml;nnen Sie Quellcode 10 entnehmen. Er setzt voraus, dass bereits eine Men&uuml;leiste namens Adressverwaltung und ein Untermen&uuml; namens &#038;Datei vorhanden sind.<\/p>\n<p>Er legt einen Untermen&uuml;eintrag mit der Beschriftung D&#038;rucken an, der beim Ausl&ouml;sen die Funktion Drucken aufruft.<\/p>\n<h2>Aktivieren und Deaktivieren von Men&uuml;elementen<\/h2>\n<p>Gelegentlich stehen Men&uuml;funktionen nicht zur Verf&uuml;gung. In der Beispielanwendung Adressverwaltung ist das z. B. beim Eintrag Datei ( Drucken der Fall. Dieser Befehl soll nur aktiviert sein, wenn der Bericht zur Ausgabe der Adressenliste aktiviert ist. Mit den beiden Funktionen aus Quellcode 11 aktivieren und deaktivieren Sie ein Element der Men&uuml;leiste.<\/p>\n<p>Im Aufruf &uuml;bergeben Sie einfach einen Verweis auf das betroffene Steuerelement. Im Falle des oben genannten Befehls sieht der Aufruf wie in Quellcode 12 aus.<\/p>\n<pre>Public Function KombinationsfeldErstellen(cbr As _    CommandBar, Datensatzherkunft As String, _    Beschreibung As String, Bezeichnung As String, _    Breite As Integer, Aktion As String, Stil As _    Integer)\r\n    Dim cbcb As CommandBarComboBox\r\n    Dim db As Database\r\n    Dim rst As Recordset\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(Datensatzherkunft, _        dbOpenDynaset)\r\n    Set cbcb = cbr.Controls.Add(Type:=4)\r\n    cbcb.BeginGroup = True\r\n    cbcb.Tag = Bezeichnung\r\n    cbcb.Caption = Beschreibung\r\n    cbcb.Width = Breite\r\n    cbcb.Style = 1\r\n    cbcb.DropDownWidth = -1\r\n    cbcb.OnAction = Aktion\r\n    cbcb.Style = Stil\r\n    If Not rst.EOF Then\r\n        Do While Not rst.EOF\r\n            cbcb.AddItem rst!Kombinationsfeldeintrag\r\n            rst.MoveNext\r\n        Loop\r\n        cbcb.ListIndex = 1\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 13<\/b><\/p>\n<p>Neben Untermen&uuml;s und Men&uuml;eintr&auml;gen zum Aufrufen von unterschiedlichen Funktionen ist noch ein weiteres Steuerelement  interessant: das Kombinationsfeld.<\/p>\n<p>Es sollte aus Anwendungen wie Word hinl&auml;nglich bekannt sein &#8211; dort dient es z. B. zur Auswahl von Eigenschaften wie Schriftart, Schriftgr&ouml;&szlig;e usw. F&uuml;r das Beispiel der Adressverwaltung ist allerdings schon ein wenig konstruktives Denken erforderlich, um ein sinnvolles Einsatzgebiet f&uuml;r ein Kombinationsfeld in der Men&uuml;leiste zu finden.<\/p>\n<p>M&ouml;glicherweise hilft aber dem einen oder anderen Anwender einer Adressverwaltung ein Kombinationsfeld, mit dem die letzten zehn angezeigten Adressen erneut aufgerufen werden k&ouml;nnen.<\/p>\n<h3>Hinweis<\/h3>\n<p>Eigentlich soll dieses Kapitel lediglich die Wrapperfunktion zum Anlegen eines Kombinationsfeldes beschreiben. Da Kombinationsfelder in Men&uuml;s aber einige Eigenheiten haben, sollen sie in einem eigenen Kapitel abgehandelt werden. <\/p>\n<h2>Einschr&auml;nkungen<\/h2>\n<p>Kombinationsfelder in Men&uuml;s weisen einige Einschr&auml;nkungen gegen&uuml;ber denen in Formularen auf. Sie k&ouml;nnen nur ein Feld je Zeile anzeigen, haben nur eine Ereigniseigenschaft (OnAction) und auch deren Auswertung ist schwierig. Sie k&ouml;nnen einem Kombinationsfeld auch keine Datensatzherkunft im klassischen Sinne zuweisen, sondern m&uuml;ssen jeden Eintrag einzeln vornehmen.<\/p>\n<h2>Funktion zum Anlegen von Kombinationsfeldern in Men&uuml;leisten<\/h2>\n<p>Die Funktion aus Quellcode 13 legt ein Kombinationsfeld in der mit dem Parameter cbr &uuml;bergebenen Men&uuml;leiste an.<\/p>\n<p>Der Parameter Datensatzherkunft dient &uuml;bergabe der Abfrage in Form eines SQL-Strings, deren Inhalt in dem Kombinationsfeld angezeigt werden soll. F&uuml;r diese Abfrage gilt eine wichtige Regel: Das bzw. die anzuzeigenden Felder m&uuml;ssen in einem Feld namens Kombinationsfeldeintrag zusammengefasst werden. Wie das funktioniert, erfahren Sie im Beispiel weiter unten.<\/p>\n<pre>Public Function AktualisiereKombinationsfeld(cbc As _        CommandBarControl, Datensatzherkunft)\r\n    Dim db As Database\r\n    Dim rst As Recordset\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(Datensatzherkunft, _        dbOpenDynaset)\r\n    cbc.Clear\r\n    If Not rst.EOF Then\r\n        Do While Not rst.EOF\r\n            cbc.AddItem rst!Kombinationsfeldeintrag\r\n            rst.MoveNext\r\n        Loop\r\n        cbc.ListIndex = 2\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 14<\/b><\/p>\n<p>Die &uuml;brigen Parameter dienen weitgehend zur Beschreibung des Aussehens des Kombinationsfeldes. Die meisten kennen Sie schon von den anderen Men&uuml;elementen. Lediglich der Funktionsparameter Breite ist neu: Mit ihm &uuml;bergeben Sie der Funktion einen Wert f&uuml;r die Breite des Kombinationsfeldes. Der Parameter Stil kann bei dieser Funktion zwei Werte annehmen: msoComboLabel und msoComboNormal. Damit k&ouml;nnen Sie das Kombinationsfeld mit oder ohne Beschriftungsfeld anlegen.<\/p>\n<p>Die Funktion legt zun&auml;chst das Kombinationsfeld an und stellt dann wie &uuml;blich die Eigenschaften ein. Zum F&uuml;llen des Kombinationsfeldes mit Daten weist die Funktion den per Zeichenkette &uuml;bergebenen SQL-Ausdruck einer neuen Datensatzgruppe zu. In einer Do While-Schleife werden alle Datens&auml;tze der Datensatzgruppe durchlaufen und der jeweils in dem Feld Kombinationsfeldeintrag gespeicherte Wert als neuer Eintrag des Kombinationsfeldes angelegt.<\/p>\n<h2>Aktualisieren des Kombinationsfeldes<\/h2>\n<p>Sind die Namen neuer Unternehmen oder neuer Personen anzulegen oder zu entfernen, muss das Kombinationsfeld aktualisiert werden. Dazu ben&ouml;tigen Sie eine abgespeckte Variante der zuvor beschriebenen Funktion (s. Quellcode 14). Diese Funktion erwartet neben dem Verweis auf das Kombinationsfeldsteuerelement die &uuml;bergabe der gew&uuml;nschten SQL-Zeichenkette. Mit der Methode Clear des Steuerelements werden die aktuellen Datens&auml;tze gel&ouml;scht. Die neuen Datens&auml;tze werden mit der bekannten Methode angelegt.<\/p>\n<p>Mit den in den beiden vorherigen Kapiteln beschriebenen Wrapperfunktionen k&ouml;nnen Sie mit wenigen Zeilen Code eine komplette Men&uuml;leiste mit beliebig vielen Steuerelementen erstellen.<\/p>\n<p>Die Erstellung der Men&uuml;leiste aus Bild 1 erfolgt beispielsweise durch die Funktion aus Quellcode 15.<\/p>\n<p>Nach der Erstellung m&uuml;ssen Sie die Men&uuml;leiste noch mit Leben f&uuml;llen. Die mit dem Quellcode aus Kapitel 7 erstellte Men&uuml;leiste beinhaltet zwar bereits alle Funktionsaufrufe, die aber in der aktuellen Fassung allesamt ins Leere laufen, da keine geeigneten Funktionen vorhanden sind. Sie m&uuml;ssen also noch die entsprechenden Funktionen zum Drucken von Berichten, Beenden der Anwendung, Anzeigen der unterschiedlichen Formulare usw. anlegen.<\/p>\n<p>Diese Funktionen werden im zweiten Teil des Beitrags Adressverwaltung mit Outlook-Schnittstelle in der kommenden Ausgabe von Access im Unternehmen genau erl&auml;utert. Dort erfahren Sie auch, was nach der Auswahl eines Eintrags des Kombinationsfeldes geschehen soll und wann der Drucken-Befehl aktiviert und deaktiviert wird.<\/p>\n<p>Da das Thema Men&uuml;s in Zusammenhang mit VBA sehr umfangreich ist, enth&auml;lt dieser Beitrag nat&uuml;rlich nur die grundlegendsten Informationen und wichtigsten Tricks und Kniffe.<\/p>\n<p>Die hier vorgestellten Grundlagen und Funktionen sind die wesentlichsten Voraussetzungen f&uuml;r die Erstellung von dynamischen Men&uuml;leisten.<\/p>\n<pre>Public Sub MenueErstellen()\r\n    Dim cbr As CommandBar\r\n    Dim subcbr As CommandBarControl\r\n    MenueleisteLoeschen \"Adressverwaltung\"\r\n    MenueleisteErstellen \"Adressverwaltung\", msoBarTop, True\r\n    Set cbr = CommandBars(\"Adressverwaltung\")\r\n    cbr.Visible = True\r\n    UntermenueErstellen cbr, \"&Datei\", \"Datei\", False\r\n    UntermenueeintragErstellen cbr.Controls(\"&Datei\"), _        msoButtonIconAndCaption, \"D&rucken\", \"Drucken\", \"=Drucken()\", _        False, 4\r\n    UntermenueeintragErstellen cbr.Controls(\"&Datei\"), msoButtonCaption, _        \"&Import von Outlook\", \"Import\", \"=ImportOutlook()\", True, 4\r\n    UntermenueeintragErstellen cbr.Controls(\"&Datei\"), msoButtonCaption, _        \"&Export nach Outlook\", \"Export\", \"=ExportOutlook()\", False, 4\r\n    UntermenueeintragErstellen cbr.Controls(\"&Datei\"), msoButtonCaption, _\r\n        \"&Beenden\", \"Beenden\", \"=Beenden()\", True, 4\r\n    UntermenueErstellen cbr, \"&Stammdaten\", \"Stammdaten\", False\r\n    UntermenueeintragErstellen cbr.Controls(\"&Stammdaten\"), _        msoButtonIconAndCaption, \"&Personen\", \"Personen\", _        \"=StammdatenPersonen()\", False, 2131\r\n    UntermenueeintragErstellen cbr.Controls(\"&Stammdaten\"), _        msoButtonIconAndCaption, \"&Unternehmen\", \"Unternehmen\", _        \"=StammdatenUnternehmen()\", False, 1016\r\n    MenueeintragErstellen cbr, \"&Detailsuche\", \"Detailsuche\", _        \"=Detailsuche()\", False\r\n    KombinationsfeldErstellen cbr, \"SELECT ''&lt;Person oder Unternehmen \" _        & \"ausw&auml;hlen&gt;'' AS Kombinationsfeldeintrag FROM qryAdressen \" _        & \"UNION SELECT Bezeichnung & \"\", \"\" & Typbezeichnung AS \" _        & \"Kombinationsfeldeintrag FROM qryAdressenTopTen\", \"&TopTen\", _        \"TopTen\", 300, \"=TopTenAuswahl()\", msoComboNormal\r\n    MenueeintragErstellen cbr, \"&\", \"Hilfe\", \"=Hilfe()\", True\r\n    MenuepunktDeaktivieren cbr.Controls(\"&Datei\").Controls(\"D&rucken\")\r\nEnd Sub<\/pre>\n<p><b>Quellcode 15<\/b><\/p>\n<p>Die Wrapperfunktionen aus Kapitel 5 und 6 helfen Ihnen, schnell die gew&uuml;nschten Men&uuml;elemente zu erstellen. Mit den M&ouml;glichkeiten, in Men&uuml;s Informationen per Kombinationsfeld zur Auswahl anzubieten und Steuerelemente an- und auszuschalten, k&ouml;nnen Sie die Benutzeroberfl&auml;che Ihrer Anwendungen erheblich ergonomischer gestalten. Sie haben mit Men&uuml;leisten eine M&ouml;glichkeit, dem Benutzer bestimmte Befehle st&auml;ndig anzubieten &#8211; egal, mit welchem Formular oder Bericht er sich gerade besch&auml;ftigt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Men&uuml;s sind &#8211; ergonomisch betrachtet &#8211; das Salz in der Suppe beim Benutzen von Softwareprodukten. Viele Anwendungen bieten mehrere M&ouml;glichkeiten, bestimmte Funktionen aufzurufen &#8211; innerhalb von Elementen der Benutzeroberfl&auml;che, per Tastatur oder eben in Men&uuml;s. Letztere haben einen Vorteil: Sie sind eigentlich immer pr&auml;sent (wenn sie nicht gerade kontextsensitiv sind) und geben dem Anwender daher die M&ouml;glichkeit, sich gut an sie zu gew&ouml;hnen. Im vorliegenden Beitrag erfahren Sie, wie Sie Ihre mit Access erstellten Anwendungen mit benutzerdefinierten Men&uuml;s ausstatten. Dabei liegt der Schwerpunkt nicht auf dem Zusammensetzen von Men&uuml;s per Anpassen-Dialog oder per Makro, sondern auf der flexibelsten Art und Weise: mit VBA.<\/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":[662003,66042003,44000028,44000025],"tags":[],"class_list":["post-55000116","post","type-post","status-publish","format-standard","hentry","category-662003","category-66042003","category-Ergonomie_und_Benutzeroberflaeche","category-VBA_und_Programmiertechniken"],"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>Dynamische Men&uuml;s mit VBA - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dynamische Men&uuml;s mit VBA\" \/>\n<meta property=\"og:description\" content=\"Men&uuml;s sind - ergonomisch betrachtet - das Salz in der Suppe beim Benutzen von Softwareprodukten. Viele Anwendungen bieten mehrere M&ouml;glichkeiten, bestimmte Funktionen aufzurufen - innerhalb von Elementen der Benutzeroberfl&auml;che, per Tastatur oder eben in Men&uuml;s. Letztere haben einen Vorteil: Sie sind eigentlich immer pr&auml;sent (wenn sie nicht gerade kontextsensitiv sind) und geben dem Anwender daher die M&ouml;glichkeit, sich gut an sie zu gew&ouml;hnen. Im vorliegenden Beitrag erfahren Sie, wie Sie Ihre mit Access erstellten Anwendungen mit benutzerdefinierten Men&uuml;s ausstatten. Dabei liegt der Schwerpunkt nicht auf dem Zusammensetzen von Men&uuml;s per Anpassen-Dialog oder per Makro, sondern auf der flexibelsten Art und Weise: mit VBA.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:17:28+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/74dc26eda6e343fa8815be85bdf4264c\" \/>\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=\"18\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Dynamische Men&uuml;s mit VBA\",\"datePublished\":\"2020-05-06T15:17:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/\"},\"wordCount\":2941,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/74dc26eda6e343fa8815be85bdf4264c\",\"articleSection\":[\"2003\",\"4\\\/2003\",\"Ergonomie und Benutzeroberfl\u00e4che\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/\",\"name\":\"Dynamische Men&uuml;s mit VBA - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/74dc26eda6e343fa8815be85bdf4264c\",\"datePublished\":\"2020-05-06T15:17:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/74dc26eda6e343fa8815be85bdf4264c\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/74dc26eda6e343fa8815be85bdf4264c\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Menues_mit_VBA\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dynamische Men&uuml;s mit VBA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dynamische Men&uuml;s mit VBA - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/","og_locale":"de_DE","og_type":"article","og_title":"Dynamische Men&uuml;s mit VBA","og_description":"Men&uuml;s sind - ergonomisch betrachtet - das Salz in der Suppe beim Benutzen von Softwareprodukten. Viele Anwendungen bieten mehrere M&ouml;glichkeiten, bestimmte Funktionen aufzurufen - innerhalb von Elementen der Benutzeroberfl&auml;che, per Tastatur oder eben in Men&uuml;s. Letztere haben einen Vorteil: Sie sind eigentlich immer pr&auml;sent (wenn sie nicht gerade kontextsensitiv sind) und geben dem Anwender daher die M&ouml;glichkeit, sich gut an sie zu gew&ouml;hnen. Im vorliegenden Beitrag erfahren Sie, wie Sie Ihre mit Access erstellten Anwendungen mit benutzerdefinierten Men&uuml;s ausstatten. Dabei liegt der Schwerpunkt nicht auf dem Zusammensetzen von Men&uuml;s per Anpassen-Dialog oder per Makro, sondern auf der flexibelsten Art und Weise: mit VBA.","og_url":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:17:28+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/74dc26eda6e343fa8815be85bdf4264c","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"18\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Dynamische Men&uuml;s mit VBA","datePublished":"2020-05-06T15:17:28+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/"},"wordCount":2941,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/74dc26eda6e343fa8815be85bdf4264c","articleSection":["2003","4\/2003","Ergonomie und Benutzeroberfl\u00e4che","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/","url":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/","name":"Dynamische Men&uuml;s mit VBA - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/74dc26eda6e343fa8815be85bdf4264c","datePublished":"2020-05-06T15:17:28+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/74dc26eda6e343fa8815be85bdf4264c","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/74dc26eda6e343fa8815be85bdf4264c"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Menues_mit_VBA\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Dynamische Men&uuml;s mit VBA"}]},{"@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\/55000116","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=55000116"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000116\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}