{"id":55000435,"date":"2024-08-01T00:00:00","date_gmt":"2024-08-14T14:45:54","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=435"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Menues_per_VBA_programmieren","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Menues_per_VBA_programmieren\/","title":{"rendered":"Men&uuml;s per VBA programmieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/1cd7195146804360847f6d2cc2b51841\" width=\"1\" height=\"1\" alt=\"\"><b>Das Men&uuml;system des VBA-Editors l&auml;sst sich &uuml;ber die Benutzeroberfl&auml;che bereits einfach anpassen. Das haben wir im Artikel &#8220;Men&uuml;system im VBA-Editor anpassen&#8221; (www.vbentwickler.de\/434)  gezeigt. Au&szlig;erdem haben wir uns im Artikel &#8220;Kontextmen&uuml;s per VBA programmieren&#8221; (www.vbentwickler.de\/368) bereits angeschaut, wie wir per VBA Kontextmen&uuml;s erstellen und anpassen k&ouml;nnen. Es fehlen also noch die Informationen, wie wir die eigentlichen Men&uuml;leisten und Symbolleisten mit VBA programmieren k&ouml;nnen. Wie das gelingt, schauen wir uns im vorliegenden Artikel an. Wir zeigen, wie vorhandene Men&uuml;s angepasst und wie neue Men&uuml;s erstellt werden k&ouml;nnen. <\/b><\/p>\n<p>Warum haben wir eigentlichen einen eigenen Artikel zum Thema Kontextmen&uuml;s per VBA programmieren ver&ouml;ffentlicht und nicht direkt etwas weiter ausgeholt und die Men&uuml;- und Symbolleisten ebenfalls beschrieben? Weil es damals darum ging, die Benutzeroberfl&auml;che der Office-Anwendungen zu erweitern.<\/p>\n<p>Und da diese bekanntlich seit Office 2007 keine Men&uuml;- und Symbolleisten mehr verwenden, sondern das Ribbon, haben wir uns auf die Kontextmen&uuml;s beschr&auml;nkt.<\/p>\n<p>Das wirft nun die Frage auf, warum wir uns dann jetzt mit den Men&uuml;- und Symbolleisten besch&auml;ftigen wollen. Nun: Es gibt noch das gallische Dorf unter den Microsoft-Anwendungen, in denen noch Men&uuml;- und Symbolleisten verwendet werden.<\/p>\n<p>Dabei handelt es sich um die Anwendung, mit der wir t&auml;glich arbeiten: den VBA-Editor. Dieser verwendet noch das gute, alte Men&uuml;- und Symbolleistensystem, das j&uuml;ngere VBA-Entwickler m&ouml;glicherweise von Office selbst gar nicht mehr kennen.<\/p>\n<p>Und da wir beispielsweise mit twinBASIC den VBA-Editor erweitern wollen und das Men&uuml;system nun einmal der Hauptort zum Unterbringen von Steuerelementen zum Aufrufen der Funktionen der entsprechenden COM-Add-Ins ist, schauen wir uns nun doch noch einmal die Grundlagen zu den Men&uuml;- und Symbolleisten an.<\/p>\n<h2>Office-Verweis sinnvoll<\/h2>\n<p>Dazu ist es sinnvoll, dem VBA-Projekt erst einmal einen Verweis auf die Bibliothek <b>Microsoft Office 16.0 Object Library <\/b>hinzuzuf&uuml;gen.<\/p>\n<p>Das erledigen wir &uuml;ber den Verweise-Dialog, den wir &uuml;ber den Men&uuml;eintrag <b>Extras|Verweise<\/b> des VBA-Editors &ouml;ffnen (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_435_001.png\" alt=\"Hinzuf&uuml;gen eines Verweises auf die Office-Bibliothek\" width=\"524,6265\" height=\"413,5826\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Hinzuf&uuml;gen eines Verweises auf die Office-Bibliothek<\/span><\/b><\/p>\n<h2>Alles ist eine Symbolleiste<\/h2>\n<p>Um direkt zu Beginn eine Begrifflichkeit zu kl&auml;ren: Im Sinne von VBA sind sowohl Men&uuml;leisten, Symbolleisten als auch Kontextmen&uuml;s alles Symbolleisten, unter VBA <b>CommandBar <\/b>genannt.<\/p>\n<p>Men&uuml;leisten und Kontextmen&uuml;s unterscheiden sich nur durch bestimmte Eigenschaften von den anderen Elementen.<\/p>\n<h2>Symbolleisten durchlaufen<\/h2>\n<p>Mit der Office-Bibliothek holen wir uns das Objektmodell zum Verwalten von <b>CommandBar<\/b>-Elementen in das VBA-Projekt. <\/p>\n<p>Vom VBA-Editor aus k&ouml;nnen wir gleich zwei <b>CommandBars<\/b>-Auflistungen durchlaufen, n&auml;mlich die des VBA-Editors als auch die der jeweiligen Host-Anwendung &#8211; also beispielsweise Access, Excel, Outlook, PowerPoint oder Word.<\/p>\n<p>Die folgende Prozedur gibt zuerst alle Elemente des VBA-Editors aus (referenziert mit <b>VBE.CommandBars<\/b>) und dann die Elemente der aktuellen Host-Anwendung, hier Access (referenziert mit <b>Access.Commandbars<\/b>):<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AlleCommandbars()\r\n     <span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>CommandBar\r\n     For Each cbr In VBE.CommandBars\r\n         <span style=\"color:blue;\">Debug.Print<\/span> \"VBA-Editor: \" & cbr.Name\r\n     <span style=\"color:blue;\">Next<\/span> cbr\r\n     For Each cbr In Access.CommandBars\r\n         <span style=\"color:blue;\">Debug.Print<\/span> \"Access: \" & cbr.Name\r\n     <span style=\"color:blue;\">Next<\/span> cbr\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wir wollen hier besonderes Augenmerk auf die Elemente des VBA-Editors legen. Die Menge ist &uuml;berschaubar, wie Bild 2 zeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_435_002.png\" alt=\"Alle Symbolleisten des VBA-Editors\" width=\"424,6267\" height=\"517,101\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Alle Symbolleisten des VBA-Editors<\/span><\/b><\/p>\n<h2>Unterscheidung der Symbolleisten nach Typ<\/h2>\n<p>Wie aber k&ouml;nnen wir nun die Men&uuml;leisten, Symbolleisten und Kontextmen&uuml;leisten voneinander unterscheiden?<\/p>\n<p>Dabei hilft uns die Eigenschaft <b>Type<\/b>. Sie liefert uns verschiedene Werte (<b>0<\/b>, <b>1 <\/b>und <b>2<\/b>). Wie finden wir heraus, welcher Wert welche Bedeutung hat? Da IntelliSense uns hier keine Hinweise gibt, schauen wir im Objektkatalog nach.<\/p>\n<p>Hier finden wir, wenn wir unter Klassen das <b>CommandBar<\/b>-Element selektieren und in den Elementen den Eintrag <b>Type<\/b>, die Information, dass es sich hierbei um die Auflistung <b>msoBarType<\/b> handelt (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_435_003.png\" alt=\"Ermitteln des Typs einer Eigenschaft\" width=\"449,6267\" height=\"506,287\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Ermitteln des Typs einer Eigenschaft<\/span><\/b><\/p>\n<p>Ein Klick auf diese Auflistung zeigt direkt die Elemente dieser Auflistung und somit die m&ouml;glichen Werte (siehe Bild 4). Klicken wir diese nacheinander an, erhalten wir die folgenden Zahlenwerte samt zugeh&ouml;rigen Konstanten plus Bedeutung:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_435_004.png\" alt=\"Ermitteln der Werte eines Eigenschaft\" width=\"424,6267\" height=\"378,0214\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Ermitteln der Werte eines Eigenschaft<\/span><\/b><\/p>\n<ul>\n<li><b>0 <\/b>(<b>msoBarTypeNormal<\/b>): Symbolleiste<\/li>\n<li><b>1 <\/b>(<b>msoBarTypeMenuBar<\/b>): Men&uuml;leiste<\/li>\n<li><b>2 <\/b>(<b>msoBarTypePopup<\/b>): Kontextmen&uuml;<\/li>\n<\/ul>\n<p>Diese Werte k&ouml;nnen wir uns gleich merken, denn wir ben&ouml;tigen diese sp&auml;ter zum Anlegen neuer <b>CommandBar<\/b>-Elemente.<\/p>\n<p>Passen wir also unsere Prozedur zur Ausgabe der VBA-Editor-Symbolleisten wie folgt an:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AlleCommandbars()\r\n     <span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>CommandBar\r\n     For Each cbr In VBE.CommandBars\r\n         Select Case cbr.Type\r\n             <span style=\"color:blue;\">Case <\/span>msoBarTypeNormal\r\n                 <span style=\"color:blue;\">Debug.Print<\/span> \"Symbolleiste: \" & cbr.Name\r\n             <span style=\"color:blue;\">Case <\/span>msoBarTypeMenuBar\r\n                 <span style=\"color:blue;\">Debug.Print<\/span> \"Men&uuml;leiste:   \" & cbr.Name\r\n             <span style=\"color:blue;\">Case <\/span>msoBarTypePopup\r\n                 <span style=\"color:blue;\">Debug.Print<\/span> \"Kontextmen&uuml;:  \" & cbr.Name\r\n         <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> cbr\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit erhalten wir bereits genauere Informationen dar&uuml;ber, welche Typ ein <b>CommandBar<\/b>-Objekt hat (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_435_005.png\" alt=\"CommandBar-Typ plus Name\" width=\"424,6267\" height=\"517,101\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: CommandBar-Typ plus Name<\/span><\/b><\/p>\n<h2>Position von CommandBar-Elementen ermitteln und festlegen<\/h2>\n<p>In Bild 6 haben wir Symbolleisten am oberen, linken, unteren und rechten Rand und au&szlig;erdem eine freischwebendes Symbolleiste. Diese haben wir dort einfach per Drag and Drop platziert. Die Position k&ouml;nnen wir nun per VBA auslesen und auch setzen. Dazu verwenden wie die folgenden Eigenschaften:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_435_006.png\" alt=\"Verschiedene Positionen f&uuml;r Symbolleisten \" width=\"700\" height=\"361,4429\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Verschiedene Positionen f&uuml;r Symbolleisten <\/span><\/b><\/p>\n<ul>\n<li><b>Position<\/b>: Liefert eine Konstante f&uuml;r die aktuelle Position zur&uuml;ck.<\/li>\n<li><b>Left<\/b>: Gibt den Abstand vom linken Fensterrand an.<\/li>\n<li><b>Top<\/b>: Gibt den Abstand vom oberen Fensterrand an.<\/li>\n<li><b>Width<\/b>: Gibt die Breite des <b>CommandBar<\/b>-Objekts an.<\/li>\n<li><b>Height<\/b>: Gibt die H&ouml;he des <b>CommandBar<\/b>-Objekts an.<\/li>\n<\/ul>\n<p>F&uuml;r die Eigenschaft <b>Position <\/b>gibt es die folgenden Werte:<\/p>\n<ul>\n<li><b>msoBarBottom<\/b>: Das <b>CommandBar<\/b>-Objekt ist am unteren Rand verankert.<\/li>\n<li><b>msoBarFloating<\/b>: Das CommandBar-Objekt ist frei schwebend.<\/li>\n<li><b>msoBarLeft<\/b>: Das <b>CommandBar<\/b>-Objekt ist am linken Rand verankert.<\/li>\n<li><b>msoBarMenuBar<\/b>: Das <b>CommandBar<\/b>-Objekt ist eine Men&uuml;leiste und somit als oberstes Element oben verankert.<\/li>\n<li><b>msoBarPopup<\/b>: Das <b>CommandBar<\/b>-Objekt ist ein Kontextmen&uuml;.<\/li>\n<li><b>msoBarRight<\/b>: Das <b>CommandBar<\/b>-Objekt ist am rechten Rand verankert.<\/li>\n<li><b>msoBarTop<\/b>: Das <b>CommandBar<\/b>-Objekt ist am oberen Rand verankert.<\/li>\n<\/ul>\n<p>Du wirst vielleicht feststellen, dass wir hier einige &Uuml;bereinstimmungen mit den Werten der Eigenschaft <b>Type <\/b>des <b>CommandBar<\/b>-Elements haben.<\/p>\n<p>Das h&auml;ngt damit zusammen, dass die Werte f&uuml;r <b>Position <\/b>wohl eigentlich nur f&uuml;r die frei platzierbaren Symbolleisten (Typ <b>msoBarTypeNormal<\/b>) vorgesehen sind.<\/p>\n<p>Damit man f&uuml;r <b>Position <\/b>aber auch f&uuml;r Typ <b>msoBarTypeMenuBar<\/b> oder <b>msoBarTypePopup<\/b> auch Werte hat, wurden die beiden Einstellungen <b>msoBarMenuBar <\/b>und <b>msoBarPopup <\/b>hinzugef&uuml;gt. <\/p>\n<p>Dabei ist anzumerken, dass <b>CommandBars <\/b>des Typs <b>msoBarTypeMenuBar <\/b>f&uuml;r <b>Position <\/b>immer den Wert <b>msoBarMenuBar <\/b>aufweisen und solche des Typs <b>msoBarTypePopup <\/b>immer den Wert <b>msoBarPopup<\/b>.<\/p>\n<h2>Weitere Eigenschaften der CommandBar-Klasse<\/h2>\n<p>Die <b>CommandBar<\/b>-Klasse liefert und noch weitere Eigenschaften:<\/p>\n<ul>\n<li><b>Application<\/b>: Soll eigentlich den Verweis der &uuml;bergeordneten Anwendung liefern, was aber in diesem Fall fehlschl&auml;gt.<\/li>\n<li><b>AdaptiveMenu<\/b>: Gibt an, ob das Men&uuml; nur die am h&auml;ufigsten verwendeten Befehle anzeigen soll. Diese Eigenschaft war nur in Office bis Version 2003 verf&uuml;gbar, im VBA-Editor hat sie keine Funktion.<\/li>\n<li><b>Builtin<\/b>: Gibt an, ob ein <b>CommandBar<\/b>-Objekt eingebaut (<b>True<\/b>) oder benutzerdefiniert ist (<b>False<\/b>)<\/li>\n<li><b>Context<\/b>: Liefert f&uuml;r <b>CommandBar<\/b>-Objekt im VBA-Editor keinen Wert.<\/li>\n<li><b>Controls<\/b>: Liefert die Auflistung der Steuerelemente des <b>CommandBar<\/b>-Elements.<\/li>\n<li><b>Creator<\/b>: Gibt einen <b>Long<\/b>-Wert zur&uuml;ck, der eine 32-Bit-Zahl darstellt, die die Anwendung identifiziert, die die <b>CommandBar<\/b>-Instanz erstellt hat. F&uuml;r Microsoft Excel ist dieser Wert beispielsweise <b>1480803660<\/b>, f&uuml;r Microsoft Access <b>1279872325 <\/b>und f&uuml;r den VBA-Editor <b>1398031698<\/b>.<\/li>\n<li><b>Enabled<\/b>: Gibt an, ob das <b>CommandBar<\/b>-Element aktiviert ist oder aktiviert oder deaktiviert dieses durch Setzen des Wertes <b>True <\/b>oder <b>False<\/b>.<\/li>\n<li><b>Index<\/b>: Liefert eine Index-Wert innerhalb der <b>CommandBars<\/b>-Auflistung.<\/li>\n<li><b>Name<\/b>: Enth&auml;lt den Standardnamen des <b>CommandBar<\/b>-Objekts (auf Englisch)<\/li>\n<li><b>NameLocal<\/b>: Enth&auml;lt den an die jeweils eingestellte Sprache angepassten Namen.<\/li>\n<li><b>Parent<\/b>: Gibt einen Objektverweis auf das &uuml;bergeordnete Element zur&uuml;ck, im Falle von <b>CommandBars <\/b>im VBA-Editor also ein Verweis auf das Objekt <b>VBE<\/b>.<\/li>\n<li><b>Protection<\/b>: Gibt den Schutzstatus des <b>CommandBar<\/b>-Elements an. In diesem Fall erhalten wir f&uuml;r die VBE-Symbolleisten Werte wie <b>0<\/b>, <b>8<\/b>, <b>22 <\/b>oder <b>23 <\/b>zur&uuml;ck. Diese entsprechen Kombinationen der folgenden Werte: <b>msoBarNoProtection <\/b>(<b>0<\/b>), <b>msoBarNoCustomize <\/b>(<b>1<\/b>), <b>msoBarNoResize <\/b>(<b>2<\/b>), <b>msoBarNoMove <\/b>(<b>4<\/b>), <b>msoBarNoChangeVisible <\/b>(<b>8<\/b>), <b>msoBarNoChangeDock <\/b>(<b>16<\/b>), <b>msoBarNoVerticalDock <\/b>(<b>32<\/b>) und <b>msoBarNoHorizontalDock <\/b>(<b>64<\/b>)<\/li>\n<li><b>RowIndex<\/b>: Gibt bei <b>CommandBar<\/b>-Elementen, die verankert sind, einen Index f&uuml;r die vertikale Anordnung an.<\/li>\n<li><b>Visible<\/b>: Gibt an, ob ein <b>CommandBar<\/b>-Element sichtbar ist oder nicht. Kann auch zum Ein- und Ausblenden von <b>CommandBar<\/b>-Elementen verwendet werden.<\/li>\n<\/ul>\n<h2>Methoden der CommandBar-Klasse<\/h2>\n<p>Die <b>CommandBar<\/b>-Klasse stellt die folgenden Methoden bereit, mit denen wir zum Beispiel <b>CommandBar<\/b>-Objekte l&ouml;schen oder zur&uuml;cksetzen k&ouml;nnen:<\/p>\n<ul>\n<li><b>Delete<\/b>: L&ouml;scht das <b>CommandBar<\/b>-Element.<\/li>\n<li><b>FindControl<\/b>: Sucht nach einem bestimmten Steuerelement im aktuellen <b>CommandBar<\/b>-Element. Dabei k&ouml;nnen die folgenden optionalen Suchparameter zum Einsatz kommen: <b>Type <\/b>(Wert aus der Auflistung <b>MsoControlType<\/b>, gibt den Typ des Steuerelements an), <b>Id<\/b> (gibt die ID des Steuerelements an), <b>Tag <\/b>(gibt den Tag des Steuerelements an), <b>Visible <\/b>(gibt an, ob das Steuerelement sichtbar ist), <b>Recursive <\/b>(gibt an, ob die Suche rekursiv durchgef&uuml;hrt werden soll)<\/li>\n<li><b>Reset<\/b>: Setzt das <b>CommandBar<\/b>-Element in den Anfangszustand zur&uuml;ck.<\/li>\n<li><b>ShowPopup<\/b>: Zeigt das <b>CommandBar<\/b>-Element als Kontextmen&uuml; an.<\/li>\n<\/ul>\n<h2>Symbolleisten-CommandBar per VBA erstellen<\/h2>\n<p>Mit der folgenden Prozedur erstellen wir ein einfaches <b>CommandBar<\/b>-Objekt als Symbolleiste:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>CreateCommandBar_Symbolleiste()\r\n     <span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>CommandBar\r\n     <span style=\"color:blue;\">Set<\/span> cbr = VBE.CommandBars.Add()\r\n     <span style=\"color:blue;\">With<\/span> cbr\r\n         .Position = msoBarTop\r\n         .Name = \"Beispielsymbolleiste\"\r\n         .Visible = <span style=\"color:blue;\">True<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies legt eine einfache Symbolleiste an. Das legen wir durch Setzen von Position auf den Wert <b>msoBarTop <\/b>fest.<\/p>\n<h2>Men&uuml;leisten-CommandBar per VBA erstellen<\/h2>\n<p>Wenn wir ein <b>MenuBar <\/b>erstellen wollen, also die Hauptmen&uuml;leiste, dann m&uuml;ssten wir den Parameter <b>MenuBar <\/b>beim Erstellen auf den Wert <b>True <\/b>einstellen. Das erledigen wir mit der folgenden Prozedur:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>CreateCommandBar_Menueleiste()\r\n     <span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>CommandBar\r\n     <span style=\"color:blue;\">Set<\/span> cbr = VBE.CommandBars.Add(, , <span style=\"color:blue;\">True<\/span>)\r\n     <span style=\"color:blue;\">With<\/span> cbr\r\n         .Name = \"Beispielmenueleiste\"\r\n         .Visible = <span style=\"color:blue;\">True<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dadurch wird gleichzeitig die eigentliche Men&uuml;leiste ausgeblendet. Der Hintergrund: Wir k&ouml;nnen jeweils nur eine Men&uuml;leiste verwenden. Die eingebaute Men&uuml;leiste blenden wir so wieder ein:<\/p>\n<pre>VBE.CommandBars(\"Men&uuml;leiste\").Visible = <span style=\"color:blue;\">True<\/span><\/pre>\n<h2>Kontextmen&uuml;-CommandBar per VBA erstellen<\/h2>\n<p>Wenn wir ein Kontextmen&uuml; ben&ouml;tigen, stellen wir Position direkt in der <b>Add<\/b>-Methode auf <b>msoBarPopup <\/b>ein. Nachdem wir den Namen festgelegt haben, k&ouml;nnen wir das Kontextmen&uuml; direkt mit der <b>ShowPopup<\/b>-Methode anzeigen.<\/p>\n<p>Damit erhalten wir allerdings nur ein leeres Quadrat, denn wir haben ja noch keine Steuerelemente hinzugef&uuml;gt:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>CreateCommandBar_Kontextmenue()\r\n     <span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>CommandBar\r\n     <span style=\"color:blue;\">Set<\/span> cbr = VBE.CommandBars.Add(, msoBarPopup)\r\n     <span style=\"color:blue;\">With<\/span> cbr\r\n         .Name = \"Kontextmenueleiste\"\r\n         .ShowPopup\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>CommandBar l&ouml;schen<\/h2>\n<p>Ein einzelnes <b>CommandBar<\/b>-Element l&ouml;schen wir mit der <b>Delete<\/b>-Methode der <b>CommandBar<\/b>-Objektvariablen.<\/p>\n<p>Dies gelingt nur f&uuml;r benutzerdefinierte <b>CommandBar<\/b>-Elemente, also solche, die wir selbst eingebaut haben:<\/p>\n<pre>cbr.Delete<\/pre>\n<h2>Alle benutzerdefinierten CommandBar-Elemente l&ouml;schen<\/h2>\n<p>Wenn wir einmal alle benutzerdefinieren Elemente entfernen wollen, k&ouml;nnen wir das mit einer Prozedur wie der folgenden erledigen.<\/p>\n<p>Diese durchl&auml;uft alle <b>CommandBar<\/b>-Elemente des VBA-Editors und pr&uuml;ft mit der Eigenschaft <b>Builtin<\/b>, ob dieses ein eingebautes oder benutzerdefiniertes <b>CommandBar<\/b>-Element ist. F&uuml;r benutzerdefinierte <b>CommandBar<\/b>-Elemente ruft sie die <b>Delete<\/b>-Methode auf:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>DeleteUserdefinedCommandbars()\r\n     <span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>CommandBar\r\n     For Each cbr In VBE.CommandBars\r\n         <span style=\"color:blue;\">If <\/span>cbr.BuiltIn = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Debug.Print<\/span> \"Delete \" & cbr.Name\r\n             cbr.Delete\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> cbr\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Artikel zeigt, wie wir vorhandene <b>CommandBar<\/b>-Elemente durchlaufen, wie wir CommandBars anlegen und wie wir diese wieder l&ouml;schen k&ouml;nnen. Au&szlig;erdem haben wir die drei verschiedenen Typen von Men&uuml;s vorgestellt: die Symbolleiste, die Men&uuml;leiste und die Kontextmen&uuml;s. Wir haben gezeigt, wir die unterschiedlichen Typen von CommandBars per VBA erzeugt werden k&ouml;nnen. Au&szlig;erdem hast Du alle relevanten Eigenschaften der <b>CommandBar<\/b>-Klasse kennengelernt.<\/p>\n<p>In einem weiteren Artikel namens <b>Men&uuml;-Steuerelemente per VBA programmieren <\/b>(<b>www.vbentwickler.de\/436<\/b>) schauen wir uns noch an, wie wir die eigentlich interessanten Elemente hinzuf&uuml;gen &#8211; die Schaltfl&auml;chen und die anderen Steuerelemente. Wobei die Schaltfl&auml;chen wohl 99% aller Steuerelemente in <b>CommandBar<\/b>-Elementen ausmachen d&uuml;rften.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Men&uuml;system des VBA-Editors l&auml;sst sich &uuml;ber die Benutzeroberfl&auml;che bereits einfach anpassen. Das haben wir im Artikel &#8220;Men&uuml;system im VBA-Editor anpassen&#8221; (www.vbentwickler.de\/434)  gezeigt. Au&szlig;erdem haben wir uns im Artikel &#8220;Kontextmen&uuml;s per VBA programmieren&#8221; (www.vbentwickler.de\/368) bereits angeschaut, wie wir per VBA Kontextmen&uuml;s erstellen und anpassen k&ouml;nnen. Es fehlen also noch die Informationen, wie wir die eigentlichen Men&uuml;leisten und Symbolleisten mit VBA programmieren k&ouml;nnen. Wie das gelingt, schauen wir uns im vorliegenden Artikel an. Wir zeigen, wie vorhandene Men&uuml;s angepasst und wie neue Men&uuml;s erstellt werden k&ouml;nnen. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662024,66042024,44000037],"tags":[],"yst_prominent_words":[],"class_list":["post-55000435","post","type-post","status-publish","format-standard","hentry","category-662024","category-66042024","category-VBAEditor_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000435","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000435"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000435\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000435"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000435"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000435"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}