Menü mit VBA selbst erstellt Laufzeitfehler 438

09/11/2007 - 13:34 von Frank Kötting | Report spam
Hallo Excel-Freunde,

ich möchte mit VBA in der Menüleiste selbst ein Menü mit entsprechenden
Unterpunkten erstellen. Das klappt soweit bis ich bei einem Menüpunkt zwei
Unterpunkte haben möchte. Das klappt leider nicht.

Mein Code schaut folgendermaßen aus:

Sub Workbook_Open()

Dim cbMenu As CommandBar
Dim cbSpecialMenu As CommandBarPopup
Dim cbCommand As CommandBarControl


Set cbMenu = Application.CommandBars("Worksheet Menu Bar")
'Zuweisen der Objectvariablen

' Erstellt in der Menüliste das Menü "Urlaubsplan"

Set cbSpecialMenu = cbMenu.Controls.Add(Type:=msoControlPopup)
cbSpecialMenu.Caption = "Urlaubsplan"
'Titelbeschriftung der Menübar

' Erstellt den Menüpunkt "Druckversion"

Set cbCommand = cbSpecialMenu.Controls.Add(Type:=msoControlPopup) '
Menüpunkt "Druckversion"
cbCommand.Caption = "Druckversion"

Set cbCommand = cbCommand.Controls.Add(Type:=msoControlButton)
cbCommand.Caption = "Aktuelle Seite"
cbCommand.OnAction = "Druckversion" '
Unterpunkt "Aktuelle Seite"


Set cbCommand = cbCommand.Controls.Add(Type:=msoControlButton)
cbCommand.Caption = "Alle Seiten"
cbCommand.OnAction = "DruckversionAlle"
' Unterpunkt "Aktuelle Seite"

End Sub


Ich bekomme beim Öffnen meiner Datei folgende Fehlermeldung:

Laufzeitfehler 438

Objekt unterstüzt diese Eigenschaft oder Methode nicht.


Wenn dann auf Debuggen klicke ist folgende Zeile markiert:

Set cbCommand = cbCommand.Controls.Add(Type:=msoControlButton)



Nur verstehe ich nicht warum und was ich da Falsch mache.

Vielen Dank für Eure Hilfe


Mfg
Frank Kötting
 

Lesen sie die antworten

#1 Lorenz Hölscher
09/11/2007 - 13:41 | Warnen spam
Hallo Frank,

meiner Ansicht nach (ich habe es noch nicht getestet) fehlt Dir schon
mal das Commandbar-Objekt dazwischen, also

Set cbCommand cbCommand.commandbar.Controls.Add(Type:=msoControlButton)

Aber selbst dann kann es nicht funktionieren, weil cbCommand kein
ControlPopUp-Typ ist! Daher wundere ich mich, daß Du diese Zeile
überhaupt ausführen darfst:

Set cbCommand cbSpecialMenu.Controls.Add(Type:=msoControlPopup)

Es müsste eigentlich

Set cbSpecialMenu cbSpecialMenu.Controls.Add(Type:=msoControlPopup)

heißen, damit der Variablen-Datentyp stimmt.

tschö, Lorenz

Ähnliche fragen