Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Kontextmenü mit Untermenü

Kontextmenü mit Untermenü
02.06.2015 21:39:04
Alexander
Hallo liebe Profis,
ich habe zwei Fragen zur Erstellung von Kontextmenüs.
1. Kann ich iregendwie eine FaceId zum Obermenü erstelllen?
2. Warum wird immer nur der letzte im Code aufgeführte Untermenüpnkt angezeigt?
Hier der Code:
Public Sub SetCommandbar()
    Dim objCmdBar As CommandBar
    Dim objCPopup As CommandBarPopup
    Dim objButton As CommandBarButton
    Set objCmdBar = Application.CommandBars("Cell")
    Set objCPopup = objCmdBar.Controls.Add(msoControlPopup, Temporary:=True)
    Set objButton = objCPopup.Controls.Add(msoControlButton, Temporary:=True)
    With objCPopup
        .Caption = "Menü"
        .BeginGroup = True
        '.FaceID = 59 
        With objButton
            .Caption = "UnterMenü1"
            .FaceId = 59
            .OnAction = "MeinMakro"
        End With
        With objButton
            .Caption = "UnterMenü2"
            .FaceId = 59
            .OnAction = "MeinMakro"
        End With
        With objButton
            .Caption = "UnterMenü3"
            .FaceId = 59
            .OnAction = "MeinMakro"
        End With
    End With
End Sub
Public Sub MeinMakro()
    MsgBox "Hallo"
End Sub

Gruß
Alex

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kontextmenü mit Untermenü
02.06.2015 21:58:08
Uduuh
Hallo,
1.: PopUps unterstützen keine FaceID
2. Warum wird immer nur der letzte im Code aufgeführte Untermenüpnkt angezeigt?
weil du nur einen Button erstellst.
Public Sub SetCommandbar()
Dim objCmdBar As CommandBar
Dim objCPopup As CommandBarPopup
Dim objButton As CommandBarButton
Set objCmdBar = Application.CommandBars("Cell")
Set objCPopup = objCmdBar.Controls.Add(msoControlPopup, Temporary:=True)
With objCPopup
.Caption = "Menü"
.BeginGroup = True
'.FaceID = 59
Set objButton = objCPopup.Controls.Add(msoControlButton, Temporary:=True)
With objButton
.Caption = "UnterMenü1"
.FaceId = 59
.OnAction = "MeinMakro"
End With
Set objButton = objCPopup.Controls.Add(msoControlButton, Temporary:=True)
With objButton
.Caption = "UnterMenü2"
.FaceId = 59
.OnAction = "MeinMakro"
End With
Set objButton = objCPopup.Controls.Add(msoControlButton, Temporary:=True)
With objButton
.Caption = "UnterMenü3"
.FaceId = 59
.OnAction = "MeinMakro"
End With
End With
End Sub
Gruß aus’m Pott
Udo

Anzeige
AW: Kontextmenü mit Untermenü
02.06.2015 22:04:48
Alexander
Hallo Udo,
ich danke dir.
Das Passt wunderbar
Gruß
Alex

AW: Kontextmenü mit Untermenü
03.06.2015 05:21:08
Luschi
Hallo Alexander,
ich benutze die Kontectmenüerstellung auf der Basis von ' Application.CommandBars("Cell")' nicht mehr, das es Situationen gibt, wo Ecxel das Kontextmenü neu zeichnet und damit meine definierten Menüpunkte erst mal weg sind. So ein Fall sind die Bereiche, die 'als Tabelle formatiert' wurden. Diese Formatvorlage überschreibt das normale Kontextmenü der Zellen.
Deshalb mache ich es so:
https://www.herber.de/forum/messages/1428396.html
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Kontextmenü mit Untermenü
03.06.2015 17:06:14
Alexander
Danke Luschi für den Tip
Gruß
Alex

@Luschi nachgefragt
04.06.2015 22:25:06
Alexander
Hallo Luschi,
Gibt es bei dieser Methode die möglichkeit das Standard Kontextmenü zu erweitern ohne alles nachbauen zu müssen? Denn mir ist aufgefallen das die Standard Funktionen unterschiedliche IDs bei verschiedenen Versionen haben.
Gruß
Alex
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Kontextmenü mit Untermenü in Excel erstellen


Schritt-für-Schritt-Anleitung

Um ein Kontextmenü mit Untermenüs in Excel zu erstellen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklicke auf "VBAProject", wähle "Einfügen" und klicke auf "Modul".

  3. Kopiere den folgenden Code in das Modul:

    Public Sub SetCommandbar()
       Dim objCmdBar As CommandBar
       Dim objCPopup As CommandBarPopup
       Dim objButton As CommandBarButton
    
       Set objCmdBar = Application.CommandBars("Cell")
       Set objCPopup = objCmdBar.Controls.Add(msoControlPopup, Temporary:=True)
       With objCPopup
           .Caption = "Menü"
           .BeginGroup = True
           Set objButton = objCPopup.Controls.Add(msoControlButton, Temporary:=True)
           With objButton
               .Caption = "UnterMenü1"
               .FaceId = 59
               .OnAction = "MeinMakro"
           End With
           Set objButton = objCPopup.Controls.Add(msoControlButton, Temporary:=True)
           With objButton
               .Caption = "UnterMenü2"
               .FaceId = 59
               .OnAction = "MeinMakro"
           End With
           Set objButton = objCPopup.Controls.Add(msoControlButton, Temporary:=True)
           With objButton
               .Caption = "UnterMenü3"
               .FaceId = 59
               .OnAction = "MeinMakro"
           End With
       End With
    End Sub
    
    Public Sub MeinMakro()
       MsgBox "Hallo"
    End Sub
  4. Führe das Makro aus: Drücke F5, um das Makro SetCommandbar auszuführen. Dein Kontextmenü wird nun in Excel erscheinen.


Häufige Fehler und Lösungen

  • Problem: Es wird nur der letzte Untermenüpunkt angezeigt.
    Lösung: Stelle sicher, dass Du für jeden Untermenüpunkt einen neuen Button erstellst. Verwende Set objButton = objCPopup.Controls.Add(msoControlButton, Temporary:=True) vor jedem Button, um sicherzustellen, dass jeder Button korrekt hinzugefügt wird.

  • Problem: FaceID wird nicht angezeigt.
    Lösung: Beachte, dass PopUps keine FaceIDs unterstützen. Entferne die Zeile .FaceID = 59, um dieses Problem zu beheben.


Alternative Methoden

Eine alternative Methode zur Erstellung von Kontextmenüs ist, die Standardfunktionen von Excel zu erweitern, anstatt sie vollständig neu zu erstellen. Du kannst dazu die Application.CommandBars verwenden, um das bestehende Kontextmenü zu modifizieren, was in einigen Versionen von Excel unterschiedlich sein kann. Eine detaillierte Anleitung findest Du hier.


Praktische Beispiele

Ein praktisches Beispiel zur Verwendung eines Kontextmenüs könnte so aussehen:

  1. Erstelle ein Kontextmenü mit Optionen zum Einfügen von häufig verwendeten Formeln.
  2. Füge Makros hinzu, die spezifische Berechnungen durchführen, wenn die entsprechenden Menüoptionen ausgewählt werden.

Verwende dabei den obigen Code als Ausgangspunkt und passe die OnAction-Parameter an Deine eigenen Makros an.


Tipps für Profis

  • Sichere Deine Makros: Stelle sicher, dass Du regelmäßig Sicherungen Deiner VBA-Projekte machst.
  • Verwende beschreibende Namen: Benenne Deine Makros und Menüpunkte so, dass sie deren Funktion klar widerspiegeln.
  • Teste in verschiedenen Excel-Versionen: Überprüfe Deine Makros in verschiedenen Excel-Versionen, um sicherzustellen, dass sie überall funktionieren.

FAQ: Häufige Fragen

1. Kann ich ein Kontextmenü ohne VBA erstellen?
Nein, die Erstellung eines benutzerdefinierten Kontextmenüs erfordert die Verwendung von VBA.

2. Wie kann ich das Kontextmenü zurücksetzen?
Um das Kontextmenü zurückzusetzen, kannst Du Excel neu starten oder den Befehl Application.CommandBars("Cell").Reset verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige