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…
Ein netter WWW-ler (Hallo Reinhardt…
) 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…
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…
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…
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 
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 = "&: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
, den Rest kriegen wir auch noch hin.
Gruß
Reinhard