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

Kontextmenü der re. Maustaste - reset

Forumthread: Kontextmenü der re. Maustaste - reset

Kontextmenü der re. Maustaste - reset
25.02.2019 14:05:03
STeve
Hallo liebe Helfer.
Bei einem Blatt habe ich zwei cmd Button wo der User
das Menü der re Maustaste
a.) neu laden kann
und
b.) auch wieder "reseten"
kann.
Jetzt wird oft vergessen das Menü wieder zu reseten und die Mappe wird geschlossen.
Nun ist natürlich die ursprüngliche re. Maustastenbelegung bei Öffnung einer anderen Excel Datei nicht vorhanden.
Versuche über diesen Code ::

Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Application.CommandBars("Cell")
.Reset   ' die rechte Maustaste (Kontextmenü) wird wieder zurückgestellt
End With
End Sub

dies automatisch - bei Schließung der Datei - zu bewirken.
Funzt leider aber nicht?
Bitte um Tipps.
lg
STeve
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kontextmenü der re. Maustaste - reset
25.02.2019 14:19:19
Dieter(Drummer
Hallo Steve,
versuch mal mit:
Application.CommandBars("Cell").Enabled = True

Tipp habe ich aus diesem Forum.
Gruß, Dieter(Drummer)
AW: Kontextmenü der re. Maustaste - reset
25.02.2019 15:15:35
STeve
Hallo Dieter
........geht leider nicht!!
mfg
AW: Kontextmenü der re. Maustaste - reset
25.02.2019 15:49:01
Nepumuk
Hallo Steve,
wozu verbiegst du das Kontextmenü? Erstell ein eigenes und zeige es im Worksheet_BeforeRightClick-Event an.
Gruß
Nepumuk
Anzeige
AW: Kontextmenü der re. Maustaste - reset
25.02.2019 16:21:04
STeve
Hi Nepumuk...............schau mal bitte den von mir eingestellten Code an.
Läuft super mit ein und aus Button.............
Keine Ahnung wie ich deinen Tipp umsetzen kann-- VBA nur Basic ;-)
lg
AW: Kontextmenü der re. Maustaste - reset
25.02.2019 16:32:01
Nepumuk
Hallo Steve,
ich habe dir mal eine Beispielmappe erstellt. Beachte auch die Makros im Modul "DieseArbeitsmappe" und im Modul der Tabelle.
https://www.herber.de/bbs/user/127914.xlsm
Das "normale" Kontextmenü bleibt unberührt. Du kannst das eigene Menü auf eine Mappe, eine Tabelle oder einen bestimmten Bereich in den Tabellen beschränken.
Gruß
Nepumuk
Anzeige
AW: Kontextmenü der re. Maustaste - reset
25.02.2019 20:57:20
STeve
Hallo Nepumuk....habe es eingebaut...ist natürlich große Klasse und klappt toll. Vielen Dank dafür schon mal.
Aber wenn der User dann noch mal das normale Kontextmenü braucht (zum Beispiel er muss Zeilen einfügen usw) wäre ein cmd Button zum Ein und Auschalten schon notwendig.
Habe versucht einen Button anzulegen aber bei der Makrozuweisung bietet es mir die Makros nicht an?
Frage:
a.) geht sowas überhaupt?
b.) wenn ja....welches Makro müsste ich beim Ein und Aus - Button hinterlegen?
Besten Dank und mfg
STeve
Anzeige
AW: Kontextmenü der re. Maustaste - reset
26.02.2019 08:01:32
Nepumuk
Hallo Steve,
was hindert dich daran eine Standardfunktion in dein Kontextmenü einzufügen?
Gruß
Nepumuk
AW: Kontextmenü der re. Maustaste - reset
26.02.2019 08:19:05
Nepumuk
Nochmal Hallo,
hier ein Beispiel wie du "Zellen einfügen" in deine CommandBar bringst:
Set objCommandBarButton = CommandBars.FindControl(ID:=3181)

Call objCommandBarButton.Move(objCommandBar)

Gruß
Nepumuk
Anzeige
AW: Kontextmenü der re. Maustaste - reset
26.02.2019 08:28:04
Nepumuk
Ich schon wieder.
Move ist falsch, denn das entfernt den Button aus dem Standard-Kontextmenü. Copy ist richtig.
Also:
Set objCommandBarButton = CommandBars.FindControl(ID:=3181)

Call objCommandBarButton.Copy(objCommandBar)

Gruß
Nepumuk
Anzeige
...schön dass du mir das zutraust.
26.02.2019 08:35:04
STeve
Guten Morgen lieber Nepumuk.............cool dass du schon um die Zeit hier unterwegs bist!!!!!und uns Quälgeistern hilfst!!!
Schön dass du mir das zutraust ;-).......aber leider weiß ich nicht wohin mit den beiden Codezeilen.
Call objCommandBarButton.Move(objCommandBar) ''' ruft ein Makro auf das ich nicht habe
BITTE und Danke
mfg STeve
Anzeige
AW: ...schön dass du mir das zutraust.
26.02.2019 10:38:53
Nepumuk
Hallo STeve,
ich habe es dir nochmal vereinfacht damit du die ID's nicht raussuchen musst:
Public Sub CreateCommandBar()
    
    Dim objCommandBar As CommandBar
    Dim objCommandBarButton As CommandBarButton
    
    Call DeleteCommandBar
    
    Set objCommandBar = CommandBars.Add(Name:=CONTEXT_MENU, _
        Position:=msoBarPopup, Temporary:=True)
    
    Set objCommandBarButton = objCommandBar.Controls.Add(Type:=msoControlButton)
    
    With objCommandBarButton
        .Caption = "1"
        .OnAction = "Testmakro1"
    End With
    
    Set objCommandBarButton = objCommandBar.Controls.Add(Type:=msoControlButton)
    
    With objCommandBarButton
        .Caption = "2"
        .OnAction = "Testmakro2"
    End With
    
    Call CommandBars("Cell").Controls(6).Copy(objCommandBar) '6=Zellen einfügen
    
    Set objCommandBarButton = Nothing
    Set objCommandBar = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
DANKESCHÖN...........
26.02.2019 18:05:56
STeve
DANKE Nepumuk........so einfach wenn man - so wie du - weiß wie es geht.
Perfekt..
Jetzt kann ich - hoffe ich - mich durch"googeln"......und ein perfektes rechtes Mauskontextmenü erstellen.
Dir noch einen traumhaften Tag.
glg STeve
zeig mal bitte den Code ...
25.02.2019 15:54:28
Matthias
Hallo
... der hinter den zwei cmd Button steckt.
........geht leider nicht!! Ist aber falsch.
Geht schon, nur sollte man nie ein Reset machen.
Immer nur Ein- und Ausschalten.
Warum, weil damit ein selbst erstelltes re.Kontexmenü gelöscht wird.
Gruß Matthias
Anzeige
AW: zeig mal bitte den Code ...
25.02.2019 16:17:59
STeve
Hallo Matthias...........hier der code der zwei Buttons: es werden aber 18 Makros eingefügt:
Hier Menü löschen und neu befüllen:

Sub rechte_Maustaste_ein()
Dim c As Object, c1 As Object
With CommandBars("Cell")
For Each c In .Controls   'das Kontextmenü der re. MT wird gelöscht
c.Delete
Next
Set c = .Controls.Add(1)
With c
.Caption = "1"
.OnAction = "Testmakro"
End With
Set c1= .Controls.Add(1)
With c1
.Caption = "2"
.OnAction = "Testmakro"
End With
End With
End Sub

und hier wieder altes Menü herstellen: in eigener Sub
Sub rechte_Maus_aus()
' die rechte Maustaste für die Anzeige/Eintragung der Dienst_Makros wird wieder zurückgestellt
Application.CommandBars("Cell").Reset
End Sub
mfg STeve
Anzeige
AW: zeig mal bitte den Code ...
25.02.2019 16:22:58
STeve
Hi Matthias L..........der code läuft über ein und aus CMD super.........was meinst du mit
Ein und Ausschalten
Bin leider nur VBA Basic.........;-)
mfg
AW: Wie ich jetzt sehe STeve, ....
25.02.2019 16:47:29
Dieter(Drummer)
... wurde dir bereits besser geholfen.
Gruß, Dieter(Drummer)
AW: Wie ich jetzt sehe STeve, ....
25.02.2019 17:07:50
STeve
Danke Dieter habe noch nicht probiert ob des funzt........aber volle nett und Danke für deine Unterstützung
Wünsch dir noch einen schönen Montag und klasse dass du immer so hilfsbereit bist.
mfg
STeve
Anzeige
AW: Danke für Rückmeldung, STeve, owT
25.02.2019 18:03:06
Dieter(Drummer)
;
Anzeige
Anzeige

Infobox / Tutorial

Kontextmenü der rechten Maustaste in Excel zurücksetzen und anpassen


Schritt-für-Schritt-Anleitung

  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: Klicke mit der rechten Maustaste auf "VBAProject (deineDatei.xlsx)" und wähle Einfügen > Modul.

  3. Code zum Zurücksetzen des Kontextmenüs eingeben: Füge den folgenden Code ein, um das Kontextmenü der rechten Maustaste zurückzusetzen, wenn die Arbeitsmappe geschlossen wird.

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
       With Application.CommandBars("Cell")
           .Reset   ' die rechte Maustaste (Kontextmenü) wird wieder zurückgestellt
       End With
    End Sub
  4. Code zum Anpassen des Kontextmenüs hinzufügen: Um das Kontextmenü anzupassen, kannst du den folgenden Code verwenden:

    Sub rechte_Maustaste_ein()
       Dim c As Object
       With CommandBars("Cell")
           For Each c In .Controls   ' das Kontextmenü der rechten MT wird gelöscht
               c.Delete
           Next
           Set c = .Controls.Add(1) ' 1 = msoControlButton
           With c
               .Caption = "Mein Makro"
               .OnAction = "MeinMakro" ' Hier den Namen deines Makros eintragen
           End With
       End With
    End Sub
  5. Makro zum Ein- und Ausschalten des Kontextmenüs: Füge einen weiteren Sub ein, um das Menü wiederherzustellen:

    Sub rechte_Maus_aus()
       ' Die rechte Maustaste für die Anzeige/Eintragung der Dienst-Makros wird wieder zurückgestellt
       Application.CommandBars("Cell").Reset
    End Sub
  6. Schließe den VBA-Editor: Speichere deine Änderungen und schließe den Editor.


Häufige Fehler und Lösungen

  • Fehler: Kontextmenü wird nicht zurückgesetzt: Stelle sicher, dass der Code im Workbook_BeforeClose richtig platziert ist.
  • Fehler: Makros werden nicht angezeigt: Überprüfe die Makrozuweisungen in deinem Button und stelle sicher, dass die Namen der Makros korrekt sind.
  • Fehler: Das Kontextmenü bleibt unverändert: Möglicherweise hast du das Kontextmenü nicht korrekt angepasst. Überprüfe deinen Code auf Syntaxfehler oder falsche Objektreferenzen.

Alternative Methoden

  • Eigens erstelltes Kontextmenü: Du kannst dein eigenes Kontextmenü erstellen und es im Worksheet_BeforeRightClick-Ereignis anzeigen lassen. So bleibt das Standardkontextmenü unberührt.

    Private Sub Worksheet_BeforeRightClick(ByVal Sh As Object, ByVal Target As Range)
      ' Hier dein benutzerdefiniertes Kontextmenü anzeigen
      CreateCommandBar
    End Sub
  • Verwendung von Application.CommandBars("cell").Enabled = True: Um das Kontextmenü der rechten Maustaste zu aktivieren, kannst du diesen Befehl verwenden.


Praktische Beispiele

  • Beispiel für ein benutzerdefiniertes Kontextmenü:

    Sub CreateCommandBar()
       Dim objCommandBar As CommandBar
       Set objCommandBar = CommandBars.Add(Name:="Mein Kontextmenü", Position:=msoBarPopup, Temporary:=True)
       With objCommandBar.Controls.Add(Type:=msoControlButton)
           .Caption = "Mein Makro"
           .OnAction = "MeinMakro"
       End With
    End Sub
  • Einfügen von Standardfunktionen: Du kannst Standardfunktionen wie "Zellen einfügen" in dein benutzerdefiniertes Kontextmenü einfügen:

    Set objCommandBarButton = CommandBars.FindControl(ID:=3181) ' ID für "Zellen einfügen"
    Call objCommandBarButton.Copy(objCommandBar)

Tipps für Profis

  • Verwende Application.CommandBars("Cell").Reset nur, wenn nötig: Das Zurücksetzen des Kontextmenüs kann deine benutzerdefinierten Einstellungen löschen. Verwende stattdessen Ein- und Ausschalten von Makros.
  • Teste deinen Code in einer sicheren Umgebung: Bevor du Änderungen an wichtigen Dateien vornimmst, teste deinen Code in einer Kopie deiner Arbeitsmappe.
  • Nutze Fehlerbehandlungsroutinen: Füge On Error Resume Next am Anfang deiner Sub ein, um Fehler zu ignorieren und das Programm nicht zum Absturz zu bringen.

FAQ: Häufige Fragen

1. Wie kann ich das Kontextmenü der rechten Maustaste anpassen?
Du kannst das Kontextmenü anpassen, indem du den Code in den VBA-Editor eingibst und das Menü mit Application.CommandBars("Cell") änderst.

2. Was passiert, wenn ich Application.CommandBars("Cell").Reset benutze?
Dieser Befehl setzt das Kontextmenü zurück und entfernt alle benutzerdefinierten Anpassungen. Verwende diesen Befehl nur, wenn du sicher bist, dass du die ursprünglichen Einstellungen wiederherstellen möchtest.

3. Wie kann ich ein benutzerdefiniertes Kontextmenü erstellen?
Du kannst ein benutzerdefiniertes Kontextmenü erstellen, indem du den Befehl CommandBars.Add verwendest und deine eigenen Buttons hinzufügst.

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