Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: makros ins kontextmenü

makros ins kontextmenü
eddie
Hallo,
wie kann man fertige makros (die Ausführung) in das Kontextmenü einbauen?
Ich habe verschiedene makros, die ich über eine Tastenkombination oder den Klassiker "Extras - makros..." ausführen kann. Ich fände es aber ergonomischer, wenn man die Ausführung von makros über das Kontextmenü (rechte Maustaste) veranlassen könnte.
Ist das möglich?
Danke für einen Tipp
Manfred

Anzeige
Commandbars("Cell").Controls.Add
06.10.2007 14:46:00
NoNet
Hallo Manfred,
hier ein Beispiel,wie Du ein Makro per Kontextmenü starten kannst :


Sub MakroInsKontextmenue()
    Dim cn
    Set cn = Application.CommandBars("Cell").Controls.Add(temporary:=True)
    With cn
        .Caption = "Mein Makro starten" 'Text,derim Kontextmenüe erscheinen soll
        .OnAction = "MeinMakro" 'Makro, das damit gestartet wird
    End With
End Sub
Sub MeinMakro()
    MsgBox "Hurra, es hat geklappt !"
End Sub
Durch den Zusatz "Temporary:=TRUE" wird sichergestellt, dass der Menüpunkt nach dem Beenden von Excel wieder gelöscht wird !
Schönes WE noch, NoNet

Anzeige
AW: Commandbars("Cell").Controls.Add
06.10.2007 23:19:07
xla
Hi,
schon erstaunlich, was da so interpretiert oder geraten wird.
Wie ist zu erkennen, dass das Kontextmenü "Cell" gemeint ist? Es gibt schließlich 'zig Kontextmenüs.
Woran ist zu erkennen, wann die Controls wieder aus dem(welchem Kontextmenü?)
entfernt werden sollen?
mfg xla

Anzeige
TIPP : Öffne Deine Augen und Deinen Verstand....
07.10.2007 00:31:00
NoNet
...dann erkennst evtl. sogar DU (oder : "Ich") das !!
Oder meinst Du etwa, das sollte im Kontextmenü einer PIVOT-Tabelle oder eines Blockpfeil-Autoshapes erscheinen
Gruß, N.

AW: TIPP : Öffne Deine Augen und Deinen Verstand....
eddie
Hallo Jungs, es waren doch glaube ich nur welche,
seid Ihr wahnsinnig?
Ich habe doch nur eine Frage gestellt und ihr macht mich fertig. Geht es nicht ein klein wenig simpler für Menschen wie "du" und ich?
Damit ich überhaupt noch die Chance bekomme, durchzublicken:
Ich behaupte jetzt einmal, mein makro heißt "addieren".
Es wäre nett, wenn jetzt ein makrovorschlag käme, der jederzeit verifizierbar ist. So, jetzt habe ich auch einmal zugeschlagen.
Schön wird das Wochenende, wenn ich auf meine kleine Bitte eine kleine Antwort bekäme.
Ich habe 0 (in wortten NULL) Ahnung, was da zur Analyse und Interpretation von mir losgerissen wurde.
Schönes WE
Manfred

Anzeige
AW: TIPP : Öffne Deine Augen und Deinen Verstand....
07.10.2007 21:47:00
Original
Hi,
du solltest alle Antworten lesen, die an dich gerichtet sind, dann wär dein
Problem sicher schon vom Tisch.
Siehe Antwort Nepumuk.
mfg Kurt

AW: makros ins kontextmenü
06.10.2007 14:51:07
Josef
Hallo Manfred,
ein Beispiel.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Cell").Reset
End Sub

Private Sub Workbook_Open()
Dim objCBar As CommandBar, objCPop As CommandBarPopup, objcBtn As CommandBarButton

Application.CommandBars("Cell").Reset


Set objCBar = Application.CommandBars("Cell")

Set objCPop = objCBar.Controls.Add(msoControlPopup, Before:=1, Temporary:=True)

objCPop.Caption = "Makros >>"

Set objcBtn = objCPop.Controls.Add(msoControlButton)

With objcBtn
    .Caption = "Makroname1"
    .FaceId = 186
    .OnAction = "NameDes1Makros"
End With

Set objcBtn = objCPop.Controls.Add(msoControlButton)

With objcBtn
    .Caption = "Makroname2"
    .FaceId = 186
    .OnAction = "NameDes2Makros"
End With

Set objCBar = Nothing
Set objCPop = Nothing
Set objcBtn = Nothing
End Sub

Gruß Sepp

Anzeige
AW: makros ins kontextmenü
06.10.2007 15:00:32
Nepumuk
Hallo Manfred,
würde ich so machen:
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_Activate()
    Call SetCommandbar
End Sub

Private Sub Workbook_Deactivate()
    Call ResetCommandbar
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Sub SetCommandbar()
    Dim objButton As CommandBarButton
    Set objButton = CommandBars("Cell").Controls.Add(Type:=msoControlButton, Temporary:=True)
    With objButton
        .Caption = "Mein Button"
        .FaceId = 59
        .OnAction = "MeinMakro"
        .Tag = "Finde mich"
        .TooltipText = "Klick mich"
    End With
End Sub

Public Sub ResetCommandbar()
    Dim objControls As CommandBarControls, objControl As CommandBarControl
    Set objControls = CommandBars.FindControls(Tag:="Finde mich")
    If Not objControls Is Nothing Then
        For Each objControl In objControls
            objControl.Delete
        Next
    End If
End Sub

Public Sub MeinMakro()
    MsgBox "Hallo"
End Sub

@Sepp
wenn ich Workbook_BeforeClose abbreche, ist dein Eintrag weg :-(
wenn du meine Commandbar resetest sind die Einträge aus meinen Addins weg :-(
Gruß
Nepumuk

Anzeige
@Nepumuk : *fg* - Genau meine Worte
06.10.2007 15:04:00
NoNet
Hallo Max,
während ich mir diesbezügl. die Finger wund tippe, belegst Du das auch gleich mit einem konkreten Beispiel - vielen Dank für das "Teamwork" ;-)
Gruß, NoNet

Vorsicht mit "RESET" - evtl. unbeabsichtigt !
06.10.2007 15:02:00
NoNet
Hallo Sepp,
grundsätzlich fnde ich es zwar ebenfalls notwendig, beim Schließen von Excel wieder aufzuräumen, aber ein Commandbars("...").RESET halte ich nicht für optimal, denn eskönnte ja auch sein, dasseinige Einträge im Kontextmenü nicht gelöscht werden sollen ! Das ist für mich wie die oft zitierte Methode "Application.Calculation=xlManual....und am Ende : Application.Calculation.xlAutomatic" - woher weiß der Programmierer denn, dass der USer die automatische Berechnung wieder aktivieren möchte ?
"Sauberer" finde ich die Lösung, das Umfeld wieder genau im gleichen Zustand zu verlassen wie man es vorgefunden hat, daher auch mein Vorschlag mit "Temporary:=TRUE". Alternativ könnte man den Eintrag auch per "FindControl" referenzieren und somit gezielt löschen.
Gruß, NoNet

Anzeige
AW: Vorsicht mit "RESET" - evtl. unbeabsichtigt !
06.10.2007 15:14:03
Josef
Hallo NoNet,
das was Du und Nepumuk aufzeigt ist mir duchaus bewusst. Im Fall von Manfred weis ich aber,
das keine sonstigen Kontextmenüeinträge vorhanden sind, die man mit Reset Weg-Beamen würde.
Gruß Sepp

Anzeige
Alles klar ;-) aber dann profitieren von den.....
06.10.2007 15:21:00
den.....
Hallo Josef,
dann profitieren zumindest ein paar "Mitleser" von unseren Informationen und das ist ja auch schon etwas wert ;-).
Schönes WE noch,
Gruß aus dem sonnigen Baden, NoNet

Ja, ich hab da mal wieder profitiert ;o)
06.10.2007 20:41:00
Matthias
Hallo NoNet & Hallo Ihr nimmermüden Helferlein
Auch ich konnte wieder einmal ein paar inaktiven Hirnzellen aktivieren,
Vielen Dank ;o)
Userbild

Anzeige
AW: makros ins kontextmenü
06.10.2007 15:00:33
Original
Hi,
sollen die Makros nur in einer bestimmten Mappe wirken oder allgemein für alle Mappen?
mfg Kurt
;
Anzeige
Anzeige

Infobox / Tutorial

Makros im Kontextmenü einfügen


Schritt-für-Schritt-Anleitung

Um ein Makro ins Excel-Kontextmenü einzufügen, kannst du die folgende Vorgehensweise nutzen:

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

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (deinWorkbookName)", wähle "Einfügen" und dann "Modul".

  3. Füge den folgenden Code ein:

    Sub MakroInsKontextmenue()
       Dim cn
       Set cn = Application.CommandBars("Cell").Controls.Add(temporary:=True)
       With cn
           .Caption = "Mein Makro starten" ' Text, der im Kontextmenü erscheinen soll
           .OnAction = "MeinMakro" ' Makro, das damit gestartet wird
       End With
    End Sub
    
    Sub MeinMakro()
       MsgBox "Hurra, es hat geklappt!"
    End Sub
  4. Makro ausführen: Führe das MakroInsKontextmenue-Makro aus, um den neuen Eintrag im Kontextmenü (rechte Maustaste) zu aktivieren.

  5. Testen: Klicke mit der rechten Maustaste in Excel auf eine Zelle, um das neue Kontextmenü zu sehen.


Häufige Fehler und Lösungen

  • Fehler: Der Eintrag im Kontextmenü erscheint nicht.

    • Lösung: Stelle sicher, dass das Makro korrekt ausgeführt wurde. Überprüfe den Namen und die Schreibweise des Makros, das im OnAction-Parameter gesetzt ist.
  • Fehler: Kontextmenü wird nicht zurückgesetzt.

    • Lösung: Füge den folgenden Code in das Workbook_BeforeClose-Ereignis ein, um das Kontextmenü zurückzusetzen:
      Application.CommandBars("Cell").Reset
  • Fehler: Mehrere Einträge erscheinen.

    • Lösung: Überprüfe den Code und stelle sicher, dass du nicht mehrmals das MakroInsKontextmenue-Makro ausführst, ohne vorherige Einträge zu löschen.

Alternative Methoden

  • Verwendung von FindControl: Anstatt das gesamte Kontextmenü zurückzusetzen, kannst du gezielt einen bestimmten Eintrag löschen. Hier ein Beispiel:

    Dim ctrl As CommandBarControl
    Set ctrl = Application.CommandBars("Cell").FindControl(Tag:="Finde mich")
    If Not ctrl Is Nothing Then ctrl.Delete
  • Dynamisches Menü: Erstelle ein Untermenü, wenn du mehrere Makros einfügen möchtest. Hierzu kannst du die Controls.Add-Methode für Popup-Elemente nutzen.


Praktische Beispiele

  1. Makro für Addieren:

    Sub Addieren()
       MsgBox "Addiere zwei Zahlen!"
    End Sub

    Um dieses Makro ins Kontextmenü einzufügen, kannst du den OnAction-Parameter wie folgt anpassen:

    .OnAction = "Addieren"
  2. Makro für Reset:

    Sub ResetKontextmenu()
       Application.CommandBars("Cell").Reset
    End Sub

    Füge dieses Makro ebenfalls ins Kontextmenü ein, um es jederzeit zurückzusetzen.


Tipps für Profis

  • Kontextmenü anpassen: Nutze die Funktion temporary:=True, um sicherzustellen, dass die Anpassungen nur während der aktuellen Sitzung bestehen bleiben und beim Schließen von Excel nicht dauerhaft sind.

  • Tastenkombinationen: Überlege dir, häufig verwendete Makros mit benutzerdefinierten Tastenkombinationen zu verknüpfen, um die Effizienz zu steigern.

  • Dokumentation: Halte den Code gut dokumentiert, damit du oder andere Benutzer ihn in Zukunft leicht verstehen und anpassen können.


FAQ: Häufige Fragen

1. Wie kann ich das Kontextmenü zurücksetzen? Du kannst das Kontextmenü mit folgendem Befehl zurücksetzen:

Application.CommandBars("Cell").Reset

2. Funktioniert das in allen Excel-Versionen? Ja, die beschriebenen Methoden sollten in den meisten modernen Excel-Versionen (z.B. Excel 2010, 2013, 2016, 2019, 365) funktionieren.

3. Kann ich das Kontextmenü nur für eine bestimmte Arbeitsmappe anpassen? Ja, du kannst die Anpassungen im VBA-Code so gestalten, dass sie nur für die aktuelle Arbeitsmappe gelten, indem du die Makros entsprechend im Modul der Arbeitsmappe platzierst.

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