Viele Makros in der Symbolleiste unterbringen?

Liebe Excelianer,

meine Datei ist inzwischen reichlich angewachsen und aus einem Makro sind 5 geworden (und es werden wohl noch mehr…).

Bisher hatte ich sie für die Benutzer der Datei per CommandButton zur Verfügung gestellt, aber langsam fehlt mit der Platz in den jeweiligen Tabellenblättern, außerdem leidet mein ästhetisches Auge…:smile:

Ein netter WWW-ler (Hallo Reinhardt…:smile:) hatte die Idee, die diversen Makros in der Symbolleiste unterzubringen; man klickt den Titel an und es öffnet sich die Aufzählung der entsprechenden Makros.

In „Excel Tabellen und Diagramme“ von I. Schels habe ich folgendes gefunden:

In „Diese Arbeitsmappe“:

Private Sub Workbook_Open()
SymbolleisteNeu
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.CommandBars(„Makros“).Delete
On Error GoTo 0
End Sub

Im Modul:

Sub SymbolleisteNeu()
Dim strTitel As String, zähler As Integer
strTitel = „Makros“
With Application
On Error Resume Next
.CommandBars(strTitel).Delete
On Error GoTo 0
.CommandBars.Add(Name:=strTitel).Visible = True
For zähler = 1 To 4
.CommandBars(strTitel).Controls.Add
Next zähler
End With
With Application.CommandBars(strTitel)
.Controls(1).Style = msoButtonCaption
.Controls(1).Caption = „Sortieren“
.Controls(1).OnAction = „Makro2“
.Controls(2).Style = msoButtonCaption
.Controls(2).Caption = „Sortieren1“
.Controls(2).OnAction = „Makro2“
End With
With Application.CommandBars(strTitel)
.Top = 50
.Left = 880
.Width = 110
End With

End Sub

Das ist schon mal nicht schlecht, aber bei 6 oder mehr Makros reicht es auch weit in den beschreibaren Teil des Tabellenblattes hinein.
Schöner wäre eindeutig die „Lösung“ von oben: Ein Überbegriff in der Symbolleiste, den man aufklicken kann und die Makro-Namen erscheinen.

Ich hoffe, ich habe mich einigermaßen verständlich ausdrücken können.

Gibts da ne Möglichkeit oder eine andere Idee?

Vielen Dank schon mal mal für eventuelle Antworten oder für detailliertere Nachfragen.

Freundliche Grüße

Jorge

Bisher hatte ich sie für die Benutzer der Datei per
CommandButton zur Verfügung gestellt, aber langsam fehlt mit
der Platz in den jeweiligen Tabellenblättern, außerdem leidet
mein ästhetisches Auge…:smile:

Hallo Jorge,

warum benutzt du die Command Button?
Lege dir doch über die Anpassung neue Menues an und dann die
entsprechenden Untermenüs, die deine Makros auslösen.
Geht ganz ohne VBA.

Gruß Peter

Hallo Jorge,

Bisher hatte ich sie für die Benutzer der Datei per
CommandButton zur Verfügung gestellt, aber langsam fehlt mit
der Platz in den jeweiligen Tabellenblättern, außerdem leidet
mein ästhetisches Auge…:smile:

warum benutzt du die Command Button?
Lege dir doch über die Anpassung neue Menues an und dann die
entsprechenden Untermenüs, die deine Makros auslösen.
Geht ganz ohne VBA.

Das Anlegen und wieder löschen geht nicht ohne VBA. Aber das Prinzip von Peter ist genau richtig: Du hast eine CommandBar, die bekommt ein Menü, und dieses Menü bekommt Deine CommandBarButtons.

Ggf. kannst Du auch noch mehr Menüs machen, wenn Deine Makros noch zusätzlich „gegliedert“ werden können, z. B.

Einfügen
 \> Füge dies ein
 \> Füge jenes ein
Formatieren
 \> Formatiere dies
 \> Formatiere jenes

Gruß, Manfred

Peter und Manfred, für eure Antworten,

aber bevor ich meine Tastatur aus dem Fenster schmeiße: ich komm nicht dahinter, wie ich es machen kann.

Ich hab jetzt Makros, Integrierte Menüs und Neues Makro in die Menüleiste gezogen, hab ein Makro zugewiesen, kann aber kein zweites geschweige denn ein Untermenü zuweisen oder anlegen.

Könnt ihr mir das als Dummie mal en detail erklären?

Und dann natürlich noch die Frage nach dem Makro, dass das Ganze nur für diese Datei aktiviert bzw. schließt. In allen andren Excel-Dateien würde dieses Menü-Symbol nur für Verwirrung sorgen.

Ich wäre euch oder dir sehr dankbar.

Freundliche Grüße

Jorge

Bisher hatte ich sie für die Benutzer der Datei per
CommandButton zur Verfügung gestellt, aber langsam fehlt mit
der Platz in den jeweiligen Tabellenblättern, außerdem leidet
mein ästhetisches Auge…:smile:

warum benutzt du die Command Button?
Lege dir doch über die Anpassung neue Menues an und dann die
entsprechenden Untermenüs, die deine Makros auslösen.
Geht ganz ohne VBA.

Das Anlegen und wieder löschen geht nicht ohne VBA. Aber das
Prinzip von Peter ist genau richtig: Du hast eine CommandBar,
die bekommt ein Menü, und dieses Menü bekommt Deine
CommandBarButtons.

Ggf. kannst Du auch noch mehr Menüs machen, wenn Deine Makros
noch zusätzlich „gegliedert“ werden können, z. B.

Einfügen
> Füge dies ein
> Füge jenes ein
Formatieren
> Formatiere dies
> Formatiere jenes

Gruß, Manfred

Hallo Jorge,

Könnt ihr mir das als Dummie mal en detail erklären?

ich sicher nicht, ohne Makro schaffte ich es bisher nur oben Symbole neu anzulegen und auch wieder zu Löschen.

Und „NeuesMenü“ klingt ja so als ob es genau das Ding wäre mit dem man Untermenüs anlegen könnte, aber ohne Vba schaffte ich das noch nie.

Abgesehen davon, finde ich die Erklärungen in der Hilfe zu „Anpassen“ und auch das Auswahlfenster wenn man mit Rechtsklick auf eine Leiste „Anpassen“ ausgewählt hat, nicht sehr erklärend.

Und dann natürlich noch die Frage nach dem Makro, dass das
Ganze nur für diese Datei aktiviert bzw. schließt. In allen
andren Excel-Dateien würde dieses Menü-Symbol nur für
Verwirrung sorgen.

Ich hab mich heut wieder in anderen Foren verzettelt, aber ich bastle dir jetzt was, schau mal in ner halben Stunde wieder rein oder morgen.

Gruß
Reinhard

Hallo Jorge,

ich hab das grad mal das Nachfolgende gebastelt, wenn es nicht klappt sag Bescheid, ch habs nur kurz getestet.

Wie man den Eintrag oben wieder wegkriegt, bzw er soll nur bei einer Datei vorhanden sein, mache ich morgen, sind nur kurze Befehele, bin aber grad sehr müde :frowning:

Die Anpassung für dich ist rel. einfach, caption ist der Name der oben erscheint, Onaction ist der Name des makros.

Gruß
Reinhard

Option Explicit
'
Sub NeuesMenue()
Dim cmbA As CommandBar, cmbpA As CommandBarPopup
Set cmbA = Application.CommandBars("Worksheet Menu Bar")
Set cmbpA = cmbA.Controls.Add(Type:=msoControlPopup)
cmbpA.Caption = "Makros"
With cmbpA.Controls.Add
 .Caption = "Mein Makro 1"
 .OnAction = "Makro1"
End With
With cmbpA.Controls.Add
 .Caption = "Mein Makro 2"
 .OnAction = "Makro2"
End With
With cmbpA.Controls.Add
 .Caption = "Mein Makro 3"
 .OnAction = "Makro3"
End With
Set cmbA = Nothing
Set cmbpA = Nothing
End Sub

Hallo zusammen.

nach vielen trials and errors hab ich den Bogen raus.

Leider funktionieren noch nicht alle zugewiesenen Makros. Muss ich morgen auf der arbeit noch kurz probieren (aber dann hab ich wirklich Urlaub!!!)

Bleibt aber noch die Frage, wie das VBA lauten muss, dass es nur für die aktulles Datei gilt; das ist mir noch unklar.

Vielen Dank an alle (hoffentlich klappts morgen!!)

Gruß

Jorge

Hallo Reinhard,

ungetestet - kann auch frühestens morgen abend oder übermorgen testen

Sub workbook\_open()
 Dim Menu As CommandBarControl, Menupunkt As CommandBarControl
 Application.ScreenUpdating = False 'Ausschalten der Bildschirmaktualisierung
 Worksheets("MeinMenu").Activate
 With Application.CommandBars("Worksheet Menu Bar") 'Zurücksetzen der Hauptmenüleiste
 .Reset
 .Controls(3).Delete 'Menüpunkte löschen
 .Controls(4).Delete
 .Controls(5).Delete
 .Controls(6).Delete
 End With
 Set Menu = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup, before:=5) 'neues Menü in der Hauptmenüleiste
 Menu.Caption = "&MeinMenu" 'Neues Menü beschriften
 Set Menupunkt = Menu.Controls.Add(Type:=msoControlButton, ID:=2949, before:=1) 'neuer Menüpunkt
 With Menupunkt
 .Caption = "&Mitarbeiter" 'Menü beschriften
 .OnAction = "MitarbeiterZeigen" 'Prozedur für neues Menü
 End With
 Set Menupunkt = Menu.Controls.Add(Type:=msoControlButton, ID:=2950, before:=2)
 With Menupunkt
 .Caption = "&amp:stuck\_out\_tongue\_winking\_eye:ausen"
 .OnAction = "PausenZeigen"
 End With
 Set Menupunkt = Menu.Controls.Add(Type:=msoControlButton, ID:=2951, before:=3)
 With Menupunkt
 .Caption = "&Belegung"
 .OnAction = "BelegungZeigen"
 End With
 Set Menupunkt = Menu.Controls.Add(Type:=msoControlButton, ID:=2952, before:=4)
 With Menupunkt
 .BeginGroup = True 'hier wird eine Linie eingefügt
 .Caption = "M&üllentsorgung"
 .OnAction = "MüllentsorgungZeigen"
 End With
 Set Menupunkt = Menu.Controls.Add(Type:=msoControlButton, ID:=2953, before:=5)
 With Menupunkt
 .BeginGroup = True 'hier wird noch eine Linie eingefügt
 .Caption = "&Entlohnung"
 .OnAction = "EntlohnungZeigen"
 End With
 With Application.CommandBars 'Symbolleisten Standard und Format ausschalten, evtl. prüfen,ob weitere sichtbar sind und diese evtl auch ausblenden
 .Item("Standard").Visible = False
 .Item("Formatting").Visible = False
 End With
 With Application
 .DisplayFormulaBar = False 'Ausblenden Beabeitungsleiste
 .DisplayStatusBar = False 'Ausblenden Statusleiste
 .Caption = "Jorges Pflegedatei - viele helfen dabei" 'Titel für Excelfenster
 .WindowState = xlMaximized 'Vollbildmodus
 End With
 Range("A1").Select
 Application.ScreenUpdating = True 'Bildschirmaktualisierung ein
End Sub

Private Sub workbook\_beforeclose(cancel As Boolean)
 Application.ScreenUpdating = False
 Application.CommandBars("Worksheet Menu Bar").Reset 'Hauptmenüleiste wird wieder Standard
 With Application.CommandBars
 .Item("Standard").Visible = True 'Symbolleiste Standard wird wieder eingeblendet
 .Item("Formatting").Visible = True 'Symbolleiste Format wird wieder eingeblendet
 End With
 With Application
 .DisplayFormulaBar = True 'Bearbeitungsleiste wird wieder eingeblendet
 .DisplayStatusBar = True 'Statusleiste wird wieder eingeblendet
 .Caption = Empty 'ExcelFenstertitel wird auf Standard zurückgesetzt
 End With
 Application.ScreenUpdating = True
End Sub

Sub beenden\_click()
 Application.ActiveWorkbook.Close
End Sub

Vorschau sieht schrecklich aus - Schrift geht über das Eingabefenster und über den Rand hinaus - egal

GuK
Marion

Bleibt aber noch die Frage, wie das VBA lauten muss, dass es
nur für die aktulles Datei gilt; das ist mir noch unklar.

Hallo Jorge,

in das Modul „DieseArmeitsmappe“:

Private Sub Workbook_Activate()
Call NeuesMenue
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call MenueLoeschen
End Sub

Private Sub Workbook_Deactivate()
Call MenueLoeschen
End Sub

Private Sub Workbook_Open()
Call NeuesMenue
End Sub

in „Modul1“:

Option Explicit
'
Sub NeuesMenue()
Dim cmbA As CommandBar, cmbpA As CommandBarPopup
Set cmbA = Application.CommandBars("Worksheet Menu Bar")
Set cmbpA = cmbA.Controls.Add(Type:=msoControlPopup)
cmbpA.Caption = "Makros"
With cmbpA.Controls.Add
 .Caption = "Mein Makro 1"
 .OnAction = "Makro1"
End With
With cmbpA.Controls.Add
 .Caption = "Mein Makro 2"
 .OnAction = "Makro2"
End With
With cmbpA.Controls.Add
 .Caption = "Mein Makro 3"
 .OnAction = "Makro3"
End With
Set cmbA = Nothing
Set cmbpA = Nothing
End Sub


Sub MenueLoeschen()
Application.CommandBars(„Worksheet Menu Bar“).Controls(„Makros“).Delete
End Sub

Gruß
Reinhard

Hallo Reinhardt,

dank erst mal.

Es funktioniert (fast) gut:

Nach speichern und wieder öffnen wird ein 2. „Makro“ in der Menüleiste angelegt (aber kein 3. bei Wiederholung).

Set cmbA = Nothing
Set cmbpA = Nothing
End Sub

Da hat er ein End With erwartet und ich habs ihm gegeben!!!

Und machmal hat er hier gemeckert:

Application.CommandBars(„Worksheet Menu
Bar“).Controls(„Makros“).Delete

Trotz allem: die Makros sind aufklickbar und funktionieren einwandfrei.

Gruß

Jorge

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Jorge,

Nach speichern und wieder öffnen wird ein 2. „Makro“ in der
Menüleiste angelegt (aber kein 3. bei Wiederholung).

*hmmh* ich habs 2-3 mal getestet, da trat das nicht auf, muß mal schauen.

Set cmbA = Nothing
Set cmbpA = Nothing
End Sub

Da hat er ein End With erwartet und ich habs ihm gegeben!!!

Mir sehr unklar, da fehlt kein End With.

Und machmal hat er hier gemeckert:

Application.CommandBars(„Worksheet Menu
Bar“).Controls(„Makros“).Delete

Okay, Vba mag es nicht wenn es was löschen soll was es nicht gibt.
Auf die Schnelle, dirty Code aber sollte klappen:

On error resume next
Application.CommandBars(„Worksheet Menu Bar“).Controls(„Makros“).Delete
on error goto 0

Trotz allem: die Makros sind aufklickbar und funktionieren
einwandfrei.

Immerhin :smile:, den Rest kriegen wir auch noch hin.

Gruß
Reinhard