Menü- bzw. Symbolleisten

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox


Excel-Version: 9.0 (Office 2000)
nach unten

Betrifft: Menü- bzw. Symbolleisten
von: ltrader
Geschrieben am: 04.07.2002 - 15:03:08

Wenn ich durch Programmcode - wie unten aufgeführt - Menü- bzw. Symbolleisten in mein Project einbringen möchte, ist es richtig, den Quelltext hierzu in ein Modul einzubringen, oder sollte man ihn in "Diese Arbeitsmappe" einfügen ?

Mein Problem ist, daß ich beim Versuch den u.g. Quelltext in Excel 2000 auszuführen einen Laufzeitfehler 5 erhalte, bei dem wenn ich im Meldungsfenster "Debuggen" anklicke, der von mir mit "FEHLERANWEISUNG" gekennzeichnete Anweisungsbeeich gelb unterlegt ist. Was mache ich falsch ?
Was habe ich vergessen zu bedenken ?
Kopeiert das Ganze doch einfach mal in ein eigenes Modul und probiert.

Vielen Dank für Eure Hilfe

Const MenuName = "Demo-Menü"
Const OpenIcon = 23
Const SaveIcon = 3
Const MugIcon = 480


Sub DemoMenuSystem()
'Erzeugt und installiert ein Demonstrations-Menüsystem

Dim myMenuBar As CommandBar
Dim aMenu As Object

'Benutzerdefinierte Befehlsleiste erzeugen


FEHLERANWEISUNG: Set myMenuBar = CommandBars.Add
(Name:="Demo-Menü", _
MenuBar:=True, _
temporary:=True)

'Menüeinträge der obersten Ebene in Menüleiste eintragen
With myMenuBar.Controls
'Menü Datei hinzufügen
Set aMenu = .Add(Type:=msoControlPopup, temporary:=True)
aMenu.Caption = "&Datei"

'Demo-Menü hinzufügen
aMenu.Caption = "De&mo"
End With

'Menü Datei füllen.
With myMenuBar.Controls("Datei").Controls
'Menüeintrag Datei|…ffnen hinzufügen
Set aMenu = .Add(Type:=msoControlButton, temporary:=True)
aMenu.Caption = "…&ffnen"
aMenu.FaceId = OpenIcon
aMenu.OnAction = "DummyCommand"
aMenu.Parameter = "Datei öffnen"

'Menüeintrag Datei|Speichern hinzufügen
Set aMenu = .Add(Type:=msoControlButton, temporary:=True)
aMenu.Caption = "&Speichern"
aMenu.FaceId = SaveIcon
aMenu.OnAction = "DummyCommand"
aMenu.Parameter = "Datei speichern"
'Menüeintrag Datei|Beenden hinzufügen, neue Gruppe beginnen
Set aMenu = .Add(Type:=msoControlButton, temporary:=True)
aMenu.Caption "&Beenden"
aMenu.OnAction = "ExitCommand"
aMenu.Parameter = "Datei beenden"
aMenu.BeginGroup = True 'Fügt Trennlinie vor Menüpunkt ein
End With

'Demo-Menü füllen
With myMenuBar.Controls("Demo").Controls
'Ersten Demo-Befehl hinzufügen
Set aMenu = .Add(Type:=msoControlButton, temporary:=True)
aMenu.Caption = "&Erster Befehl"
aMenu.OnAction = "DummyCommand"
aMenu.Parameter = "Demo Eins"

'Zweiten Demo-Befehl hinzufügen
Set aMenu = .Add(Type:=msoControlButton, temporary:=True)
aMenu.Caption = "&Zweiter Befehl"
aMenu.OnAction = "DummyCommand"
aMenu.Parameter = "Demo Zwei"

'Untermenü zum Menü hinzufügen, als Popup-Menü
Set aMenu = .Add(Type:=msoControlPopup, temporary:=True)
aMenu.Caption = "&Untermenü"
aMenu.BeginGroup = True 'Fügt Trennlinie vor Menüpunkt ein
End With

'Menü Demo|Untermenü füllen
With myMenuBar.Controls("Demo").Controls("Untermenü").Controls
'Menüeintrag für Demo von Umschalten einer Markierung hinzufügen
Set aMenu = .Add(Type:=msoControlButton, temporary:=True)
aMenu.Caption = "Markierung einschalten"
aMenu.OnAction = "CheckToggle"

'Menüeintrag für Demo von Umschalten einer Schaltfläche hinzufügen
Set aMenu = .Add(Type:=msoControlButton, temporary:=True)
aMenu.Caption = "Option einschalten"
aMenu.FaceId = MugIcon
aMenu.OnAction = "ButtonToggle"

'Menüeintrag mit Trennlinie hinzufügen
Set aMenu = .Add(Type:=msoControlButton, temporary:=True)
aMenu.Caption = "Befehl&1"
aMenu.OnAction = "DummyCommand"
aMenu.Parameter = aMenu.Caption
aMenu.BeginGroup = True

'Einen weiteren leeren Befehl hinzufügen
Set aMenu = .Add(Type:=msoControlButton, temporary:=True)
aMenu.Caption = "Befehl&2"
aMenu.OnAction = "DummyCommand"
aMenu.Parameter = aMenu.Caption
End With
myMenuBar.Visible = True 'Menü aktivieren
End Sub


Sub CheckToggle()
'Schaltet die Markierung um, ändert die Beschriftung

With CommandBars("Demo-Menü").Controls("Demo")
With .Controls("Untermenü").Controls(1)
If .State = msoButtonUp Then
.State = msoButtonDown
.Caption = "Markierung ausschalten"
Else
.State = msoButtonUp
.Caption = "Markierung einschalten"
End If
End With
End With
End Sub


Sub ButtonToggle()
'Schaltet die Schaltfläche um, ändert die Beschriftung

With CommandBars(MenuName).Controls(ÒDemoÓ)
With .Controls("Untermenü").Controls(2)
If .State = msoButtonUp Then
.State = msoButtonDown
.Caption = "Option ausschalten"
Else
.State = msoButtonUp
.Caption = "Option einschalten"
End If
End With
End With
End Sub


Sub DummyCommand()
'Zeigt ein Meldungsfeld an, die Ausführung eines Befehls simuliert

Dim CmdCtrl As Object
Set CmdCtrl = CommandBars.ActionControl

If CmdCtrl Is Nothing Then Exit Sub

MsgBox prompt:="Simulation des Befehls " & _
CmdCtrl.Parameter, _
Buttons:=vbInformation, _
Title:="Demonstration des Menüsystems"
End Sub


Sub ExitCommand()
'Entfernt die benutzerdefinierte Befehlsleiste
CommandBars(MenuName).Delete
End Sub


nach oben   nach unten

Re: Menü- bzw. Symbolleisten
von: Dieter Klemke
Geschrieben am: 05.07.2002 - 23:58:46

Hallo Itrader,
der Fehler wird ev. dadurch verursacht, dass bereits eine Menüleiste mit dem Namen "Demo-Menü" existiert.
Wenn du die folgenden Statements an den Anfang setzt, wird immer erst vorsorglich gelöscht.

Dim cb As CommandBar

For Each cb In CommandBars
If cb.Name = "Demo-Menü" Then cb.Delete
Next cb

Dass er dann im weiteren Ablauf an dem Statement:
With myMenuBar.Controls("&Datei").Controls
hängen bleibt, liegt daran, dass du vorher hintereinander
aMenu.Caption = "&Datei"
und
aMenu.Caption = "De&mo"
geschrieben hast. Dadurch gibt es die Caption "&Datei" nicht mehr. Wahrscheinlich fehlt da nur ein weiterer Set ... Add...
Ich würde das ganze erst mal in kleinerem Rahmen testen.

Mit dem Quelltext in einem normalen Modul liegst du schon richtig.
Wenn du den Text in "DieseArbeitsmappe" stellst, mußt du anstelle von CommandBras
immer setzen Application.CommandBars.

MfG
Dieter

 nach oben

Beiträge aus den Excel-Beispielen zum Thema "Menü- bzw. Symbolleisten"