Lösung:
|
Da sich Excel objekt- und ereignisorientiert programmieren lässt, können
Sie auch für bedarfsgerechte Menüs sorgen. Am einfachsten erreichen
Sie das, indem Sie Ereignisprozeduren in das VBA-Objekt "DieseArbeitsmappe"
einfügen. So blenden Sie das spezielle Menü aus, sobald Sie die
Mappe deaktivieren - zum Beispiel beim Wechsel in ein anderes Fenster
-, und Sie blenden das Menü ein, wenn Sie die Mappe wieder in den
Vordergrund holen.
Das folgende Beispiel zeigt ausserdem, wie Sie ein Menü per
Programmcode beim Öffnen einer Datei einrichten und es beim Schliessen
der Datei wieder entfernen. So gehen Sie vor:
- Öffnen Sie die Excel-Datei, die Sie um ein Menü mit
Spezialbefehlen erweitern wollen.
- Wechseln Sie mit Alt + F11 in den Visual Basic-Editor.
- Suchen Sie im Projekt-Explorer den Projektnamen der aktuellen
Datei und blenden Sie den untergeordneten Zweig "Microsoft
Excel Objekte" sowie die darunter befindlichen Elemente ein.
- Zu diesen Elementen gehört ein Eintrag namens "DieseArbeitsmappe".
Öffnen Sie mit einem Doppelklick das zugehörige Codefenster.
- Beginnen Sie mit einer Prozedur, die beim Öffnen der Datei ein
neues Menü mit einem einzelnen Befehl anlegt. Dafür können Sie
auf die vorgefertigten Ereignisprozeduren zurückgreifen, indem
Sie am oberen Rand des Codefensters die linke Dropdown-Liste öffnen
und "Workbook" auswählen. Dann öffnen Sie das rechte
Dropdown-Feld und wählen "Open" an. Das daraufhin
eingefügte Prozedurgerüst ergänzen Sie wie folgt:
Private Sub Workbook_Open()
Dim cbMenu As CommandBar
Dim cbSpecialMenu As CommandBarPopup
Dim cbCommand As CommandBarControl
Set cbMenu = _
Application.CommandBars("Worksheet Menu Bar")
Set cbSpecialMenu = _
cbMenu.Controls.Add(Type:=msoControlPopup)
cbSpecialMenu.Caption = "Spezialmenü"
Set cbCommand = _
cbSpecialMenu.Controls.Add(Type:=
msoControlButton)
cbCommand.Caption = "Spezialbefehl"
End Sub
Mit diesen Anweisungen fügen Sie ein Menü namens "Spezialmenü"
in die Standard-Menüleiste von Excel ein. Ausserdem erweitern Sie das
Menü um einen Befehl namens "Spezialbefehl". Wenn dieser
Befehl eine Aktion ausführen soll, müssen Sie nicht nur die "Caption"-
sondern auch die "OnAction"-Eigenschaft setzen und ihr den
Namen eines Makros zuweisen.
- Fahren Sie mit einer Prozedur fort, die das "Spezialmenü"
beim Schliessen der Datei wieder entfernt. Dazu verfahren Sie wie
in Schritt 5, um das "Workbook"-Objekt aus dem linken
Dropdown-Feld auszuwählen. Im rechten Dropdown-Feld aktivieren
Sie dieses Mal aber das "BeforeClose"-Ereignis. Als
Prozedurcode geben Sie folgendes ein:
Private Sub Workbook_BeforeClose(Cancel
As Boolean)
Dim cbSpecialMenu As CommandBarControl
On Error Resume Next
Set cbSpecialMenu = _
Application.CommandBars("Worksheet Menu " &
_
"Bar").Controls("Spezialmenü")
cbSpecialMenu.Delete
End Sub
- Den Menübefehl müssen Sie nicht gesondert entfernen, da er
zusammen mit dem übergeordneten Menü gelöscht wird.
- Damit haben Sie bereits die erste Voraussetzung für ein
bedarfsgerechtes Einblenden und Ausblenden des Menüs geschaffen.
In dieser Form bleibt es aber so lange sichtbar wie die Datei geöffnet
ist, auch wenn Sie das Fenster einer anderen Datei aktivieren.
Um den Menüzugriff
ausschliesslich im Rahmen der passenden Arbeitsmappe zu erlauben, fügen
Sie Prozeduren für das "Deactivate"- sowie das "Activate"-Ereignis
des "Workbook"-Objekts hinzu. Wie Sie die Ereignisprozeduren
im Codefenster anlegen, wissen Sie aus den vorherigen Schritten. Hier
nur die entsprechenden Programmzeilen:
Private Sub Workbook_Deactivate()
On Error Resume Next
Application.CommandBars("Worksheet Menu " &
_
"Bar").Controls("Spezialmenü").Visible
= False
End Sub
Private Sub Workbook_Activate()
On Error Resume Next
Application.CommandBars("Worksheet Menu " &
_
"Bar").Controls("Spezialmenü").Visible
= True
End Sub
- Nun können Sie die aktuelle Arbeitsmappe speichern und schliessen.
Beim nächsten Öffnen wird am rechten Ende der Excel-Menüleiste
das neue Menü "Spezialmenü" erscheinen. Es
verschwindet, sobald Sie die Mappe schliessen oder eine andere
Excel-Datei aktivieren. Wenn Sie zur ursprünglichen Mappe zurückkehren,
steht Ihnen das Menü wieder zur Verfügung.
|