VBA: Excel Benutzeroberfläche anpassen

Hallo,

Ich hab einige fragen,

Ich möchte meine Benutzeroberfläsche von Excel für eine einzige datei ändern.
Klappt sogar, allerdings hab ich da ein paar kleine erweiterungen oder probleme.

Application.ScreenUpdating = False
On Error Resume Next 'in case the menu item has already been deleted
Application.CommandBars("Worksheet Menu Bar").Controls("Personal Management").Delete 'delete the menu item
Application.CommandBars("Worksheet Menu Bar").Controls("Turnover").Delete 'delete the menu item
Application.CommandBars("Worksheet Menu Bar").Controls("Einstellungen").Delete 'delete the menu item
Application.CommandBars("Worksheet Menu Bar").Controls("Arbeitserlaubniss").Delete 'delete the menu item
Application.CommandBars("Worksheet Menu Bar").Controls("Hilfe").Delete 'delete the menu item
 Dim cmbBar As CommandBar
 Dim cmbControl As CommandBarControl

 Set cmbBar = Application.CommandBars("Worksheet Menu Bar")
 Set cmbControl = cmbBar.Controls.Add(Type:=msoControlButton, Temporary:=True) 'adds a menu item to the Menu Bar
 With cmbControl
 .Caption = "Personal Management" 'names the menu item
 .OnAction = "TABELLENBLATT1" 'runs the specified macro
 .Style = msoButtonCaption
 .TooltipText = "Zur bearbeitung von Personal Daten."
 .Tag = "Personal Management"
 End With
 Set cmbControl = cmbBar.Controls.Add(Type:=msoControlButton, Temporary:=True) 'adds a menu item to the Menu Bar
 With cmbControl
 .Caption = "Turnover" 'names the menu item
 .OnAction = "TABELLENBLATT2" 'runs the specified macro
 .Style = msoButtonCaption
 .TooltipText = "Zur erstellung vom Turnover."
 .Tag = "Turnover"
 End With
 Set cmbControl = cmbBar.Controls.Add(Type:=msoControlButton, Temporary:=True) 'adds a menu item to the Menu Bar
 With cmbControl
 .Caption = "Einstellungen" 'names the menu item
 .OnAction = "TABELLENBLATT3" 'runs the specified macro
 .Style = msoButtonCaption
 .TooltipText = "Firmen bezogene Einstellungen ändern."
 .Tag = "Einstellungen"
 End With
 Set cmbControl = cmbBar.Controls.Add(Type:=msoControlButton, Temporary:=True) 'adds a menu item to the Menu Bar
 With cmbControl
 .Caption = "Arbeitserlaubniss" 'names the menu item
 .OnAction = "TABELLENBLATT4" 'runs the specified macro
 .Style = msoButtonCaption
 .TooltipText = "Zur bearbeitung Eu-Länder."
 .Tag = "Arbeitserlaubniss"
 End With
 Set cmbControl = cmbBar.Controls.Add(Type:=msoControlButton, Temporary:=True) 'adds a menu item to the Menu Bar
 With cmbControl
 .Caption = "Ein/Ausloggen" 'names the menu item
 .OnAction = "TABELLENBLATT2" 'runs the specified macro
 .Style = msoButtonCaption
 .TooltipText = "Um Den Bediener zuwechseln."
 .Tag = "Ein/Ausloggen"
 End With
 Set cmbControl = cmbBar.Controls.Add(Type:=msoControlPopup, Temporary:=True) 'adds a menu item to the Menu Bar
 With cmbControl
 .BeginGroup = True
 .Caption = "Hilfe" 'names the menu item
 .TooltipText = "Bei Fragen und Probleme."
 .Tag = "Hilfe"
 With .Controls.Add(Type:=msoControlButton) 'adds a dropdown button to the menu item
 .Caption = "Kontakt Infos" 'adds a description to the menu item
 .OnAction = "RunMyMacro1" 'runs the specified macro
 .FaceId = 568 'assigns an icon to the dropdown
 End With
 With .Controls.Add(Type:=msoControlButton)
 .Caption = "Email"
 .OnAction = "RunMyMacro2"
 .FaceId = 3738
 End With
 With .Controls.Add(Type:=msoControlButton)
 .Caption = "FAQ"
 .OnAction = "RunMyMacro2"
 .FaceId = 3998
 End With
 End With
With Application
 .CommandBars("Worksheet Menu Bar").Controls("Datei").Visible = False
 .CommandBars("Worksheet Menu Bar").Controls("Bearbeiten").Visible = False
 .CommandBars("Worksheet Menu Bar").Controls("Ansicht").Visible = False
 .CommandBars("Worksheet Menu Bar").Controls("Einfügen").Visible = False
 .CommandBars("Worksheet Menu Bar").Controls("Format").Visible = False
 .CommandBars("Worksheet Menu Bar").Controls("Extras").Visible = False
 .CommandBars("Worksheet Menu Bar").Controls("Daten").Visible = False
 .CommandBars("Worksheet Menu Bar").Controls("Fenster").Visible = False
 .CommandBars("Worksheet Menu Bar").Controls("?").Visible = False
 .CommandBars("Standard").Visible = False
 .CommandBars("Formatting").Visible = False
 .CommandBars("Control Toolbox").Visible = False
 .CommandBars("Drawing").Visible = False
 .DisplayFormulaBar = False
 .DisplayStatusBar = False
End With
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayWorkbookTabs = False
Application.ScreenUpdating = True

dieser Code entfernt alle Symbolleisten und Menu bars und erstellet für mich dann ein neues menu. soweit so gut :wink:

jedoch hab ich das problem, das jedesmal wenn ich die datei starte muss er erst die prozedur durch führen. ich mach es über Private Sub Workbook_Open()
und das dauert immer und sieht einfach blöd aus wenn die icons erst da sind und dann nach einnander verschwinden.

Meine datei macht alle einstellung immer wieder rückgänge befor_Close damit ich die einstellung nicht bei andern Excel dateien habe.

Meine frage (tut mir leid das sie erst jetzt kommt) ist ob es möglich ist diese informationen direkt in die datei zu laden so das er automatisch alles läd anstatt erst excel und dann mit Workbook_Open die einstellung läd.

Gruß
Leo

Hallo Leo,

ich wollte dir antworten, hab schon eine Antwort geschriebn, dann kam ich gedanklich auf zig Probleme und habe auch den Sinn der Sache, also die Umwandlung der Symolleisten „unsichtbar“ oder „gleich“ (beim Öffnen der Mappe) aber so schnell daß es keiner sieht in Frage gestellt, wegen a) geht das überhaupt b) quasi Kosten-NutzenRechnung des Aufwandes.

Anyway, nachfolgend das was ich schreiben wollte, dann abgebrochen habe.
Vielleicht kannste ja damit was anfangen

Gruß
Reinhard

Hallo Leo,

dieser Code entfernt alle Symbolleisten und Menu bars und
erstellet für mich dann ein neues menu. soweit so gut :wink:

ich glaub, da gibts einen Befehl namens „Reset“, schau mal danach.

jedoch hab ich das problem, das jedesmal wenn ich die datei
starte muss er erst die prozedur durch führen. ich mach es
über Private Sub Workbook_Open()
und das dauert immer und sieht einfach blöd aus wenn die icons
erst da sind und dann nach einnander verschwinden.

hmmh, spontan gedacht, du könntest Excel durh das Open-Ereignis minimert oder im Hintergrund laden, dann Veränderungen durchführen, dann Excel maximieren.

Meine datei macht alle einstellung immer wieder rückgänge
befor_Close damit ich die einstellung nicht bei andern Excel
dateien habe.

Aha, was ist wenn du noch eine mappe öffnest?
Private Sub Workbook_Deactivate()
könnte das abfangen.

Meine frage (tut mir leid das sie erst jetzt kommt) ist ob es
möglich ist diese informationen direkt in die datei zu laden
so das er automatisch alles läd anstatt erst excel und dann
mit Workbook_Open die einstellung läd.

Da bin ich grad überfragt. Ich glaube, einige Einstellungen pro Blatt oder Mappe werden automatisch übernommen wenn man die mappe öffnet.

Bei Symbolleisten usw. sehe ich das nicht so. Da wird m.E. gelten, Excel öffnet mit den eingestellten Symbolleisten usw. Änderungen dann selbst ducrch Code im Open-Ereignis.

Auch wieder nur so spontan angedacht = kann auch Blödsinn sein.
Zumindest in Versionen unter XL2007 könnte das klappen.

Du entwickelst in deiner personl.xls ein Klassenmodul, was auf das Öffnen einer beliebigen Datei reagiert.
Vorher hast du manuell oder per Code die Symbolleisten für dich geändert wie du sie willst.

Soweit ich weiß, stehen diese Informationen in einer Excel*.xls.
Diese suchst du und benennst sie um in MeineLeisten.xlb.

In dem Klassenmodul-Code reagierst du dann so wenn der Name der zu öffnenden Mappe lautet GenaubeiderMappe.xls, daß dann