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

Forumthread: rechte Maustaste Kontextmenü - wohin Code

rechte Maustaste Kontextmenü - wohin Code
11.02.2019 22:42:22
STeve
Hallo liebe Helfer......für euch ein lächerliches Problem: Bitte aber um Hilfe.
Habe ca. 25 kleine Makros die ich mit cmd Button starte. Jetzt möchte ich - aus Platzgründen - umbauen.
Ideal ist folgender Code wo das Kontextmenü (rechte Maustaste) genau nach meinen Wünschen richten kann:
...aber wohin muss ich die Makros einfügen

a.)damit es nur auf dem bestimmten Blatt und
b.) nur in der betreffenden Arbeitsmappe
funktioniert
Sub Add_Action_to_Cells_Context_Menu()
Dim myCb As CommandBar
Dim myCtl As CommandBarControl
Set myCb = CommandBars("Cell")
Set myCtl = myCb.Controls.Add()
With myCtl
.Caption = "Befehlsname"
.OnAction = "Makro zum ausführen"
End With
Set myCtl = myCb.Controls.Add()
With myCtl
.Caption = "Anderer Name"
.OnAction = "Anderes Makro"
End With
End Sub

Sub Delete_Commandbars_New_Controls()
With CommandBars("Cell")
.Controls("Befehlsname").Delete
.Controls("Anderer Name").Delete
End With
Besten Dank mfg STeve


		
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: rechte Maustaste Kontextmenü - wohin Code
12.02.2019 01:21:03
mumpel
Hallo!
Ich würde das in RibbonX auslagern. Dann kannst Du mit "getVisible" kontrollieren. Läuft dann aber nur in Office 2010 und neuer.
RibbonX-Code:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="XLContextMenue">

<ribbon></ribbon>

<backstage></backstage>

<contextMenus>
  <contextMenu idMso="ContextMenuCell">
    <menuSeparator id="ctmSep0"/>
        <button id="ctmbtn0" label="Makro1" onAction="Makro1"
                imageMso="FontBold" getVisible="getVisible_ContextMenueControls" />
        <button id="ctmbtn1" label="Makro2" onAction="Makro2"
                imageMso="FontItalic" getVisible="getVisible_ContextMenueControls"/>
  </contextMenu>
</contextMenus>

</customUI>

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:René Holtz

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

In "DieseArbeitsmappe":
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
 If Not objRibbon Is Nothing Then objRibbon.Invalidate
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:René Holtz

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

In ein allgemeines Modul:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
 If Not objRibbon Is Nothing Then objRibbon.Invalidate
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:René Holtz

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

https://www.herber.de/bbs/user/127589.xlsm
Gruß, René
Anzeige
Nachtrag
12.02.2019 01:28:06
mumpel
Du kannst natürlich für jedes Blatt auch nur ein Button vorsehen. Dafür gibst Du der Schaltflächen-ID den Namen des Tabellenblattes, das kannst Du dann im Callback behandeln.
RibbonX-Code:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="XLContextMenue">

<ribbon></ribbon>

<backstage></backstage>

<contextMenus>
  <contextMenu idMso="ContextMenuCell">
    <menuSeparator id="ctmSep0"/>
        <button id="Tabelle1" label="Makro1" onAction="Makro1"
                imageMso="FontBold" getVisible="getVisible_ContextMenueControls" />
        <button id="Tabelle2" label="Makro2" onAction="Makro2"
                imageMso="FontItalic" getVisible="getVisible_ContextMenueControls"/>

        <button id="Tabelle3" label="Makro3" onAction="Makro3"
                imageMso="FontItalic" getVisible="getVisible_ContextMenueControls"/>
  </contextMenu>
</contextMenus>

</customUI>

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:René Holtz

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

getVisible-Ereignis:
Public Sub getVisible_ContextMenueControls(control As IRibbonControl, ByRef returnedValue)
 If ActiveSheet.Name = control.ID Then
    returnedValue = True
 Else
    returnedValue = False
 End If
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:René Holtz

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


Anzeige
Danke...........
15.02.2019 12:56:39
STeve
Danke lieber Mumpel für deine schnelle und wie - ich schon oft im Forum mitverfolgt habe - hoch qualifizierte Antwort bzw. deinen Tipp.
Ein eigenes Ribbon anzulegen scheint mir doch zuviel Arbeit. Werde es mit der rechten Maustaste lösen. Derzeit sind es ca. 25 Makros. Sollte mein Projekt dann schlussendlich doch zuviele Makros für die rechte MT erhalten werde ich deinen Tipp "versuchen" umzusetzen.
Besten Dank dir und Sorry für die späte Antwort - ist normal gar nicht meine Art - aber hatte in den letzten Tagen zu wenig Zeit.
Dir noch ein schönes WE und
glg STeve
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Kontextmenü anpassen: Rechte Maustaste in Excel aktivieren


Schritt-für-Schritt-Anleitung

Um das Kontextmenü (rechte Maustaste) in Excel anzupassen, kannst du VBA verwenden. Hier ist eine einfache 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)", gehe zu "Einfügen" und wähle "Modul".

  3. Füge den folgenden Code ein:

    Sub Add_Action_to_Cells_Context_Menu()
       Dim myCb As CommandBar
       Dim myCtl As CommandBarControl
       Set myCb = CommandBars("Cell")
       Set myCtl = myCb.Controls.Add()
       With myCtl
           .Caption = "Befehlsname"
           .OnAction = "MakroZumAusführen"
       End With
       Set myCtl = myCb.Controls.Add()
       With myCtl
           .Caption = "Anderer Name"
           .OnAction = "AnderesMakro"
       End With
    End Sub
  4. Führe das Makro aus: Schließe den VBA-Editor und führe das Makro Add_Action_to_Cells_Context_Menu aus, um das Kontextmenü zu aktivieren.

  5. Optional: Entfernen des Kontextmenüs: Wenn du die hinzugefügten Befehle wieder entfernen möchtest, füge den folgenden Code in ein Modul ein und führe ihn aus:

    Sub Delete_Commandbars_New_Controls()
       With CommandBars("Cell")
           .Controls("Befehlsname").Delete
           .Controls("Anderer Name").Delete
       End With
    End Sub

Häufige Fehler und Lösungen

  • Kontextmenü fehlt: Wenn das Excel Kontextmenü fehlt, stelle sicher, dass du den richtigen Code im richtigen Modul hinzugefügt hast. Der Code muss im Modul "DieseArbeitsmappe" oder einem allgemeinen Modul liegen.

  • Rechte Maustaste funktioniert nicht in Excel: Überprüfe, ob das Kontextmenü durch andere Add-Ins oder Makros deaktiviert wurde. Deaktiviere diese vorübergehend, um zu testen.

  • Excel Rechtsklick Menü fehlt: Manchmal kann es an den Excel-Einstellungen liegen. Stelle sicher, dass du die Standardeinstellungen in Excel nicht versehentlich geändert hast.


Alternative Methoden

Eine alternative Methode zur Anpassung des Kontextmenüs ist die Verwendung von RibbonX, das in Excel 2010 und neuer funktioniert. Hier ist ein Beispielcode:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="XLContextMenue">
    <contextMenus>
        <contextMenu idMso="ContextMenuCell">
            <button id="ctmbtn0" label="Makro1" onAction="Makro1" imageMso="FontBold" getVisible="getVisible_ContextMenueControls"/>
            <button id="ctmbtn1" label="Makro2" onAction="Makro2" imageMso="FontItalic" getVisible="getVisible_ContextMenueControls"/>
        </contextMenu>
    </contextMenus>
</customUI>

Praktische Beispiele

  1. Makro für bestimmte Arbeitsblätter hinzufügen: Du kannst dafür die Schaltflächen-ID anpassen und diese den Blattnamen zuordnen, um spezifische Makros in bestimmten Blättern zu aktivieren.

  2. Aktivierung des Kontextmenüs nur in einer Arbeitsmappe: Verwende die Workbook_Open()-Methode, um das Kontextmenü beim Öffnen einer bestimmten Arbeitsmappe zu aktivieren.


Tipps für Profis

  • Verwende spezifische Makronamen: Achte darauf, dass die Namen der Makros eindeutig sind, um Verwirrung zu vermeiden.

  • Testen auf verschiedenen Excel-Versionen: Stelle sicher, dass dein Code in den unterschiedlichen Versionen von Excel (besonders 2010 und neuer) funktioniert.

  • Backup erstellen: Bevor du Änderungen am Kontextmenü vornimmst, erstelle ein Backup deiner Arbeitsmappe, um Datenverlust zu vermeiden.


FAQ: Häufige Fragen

1. Wie aktiviere ich das Excel Kontextmenü?
Du kannst das Excel Kontextmenü aktivieren, indem du VBA verwendest, um spezifische Makros hinzuzufügen.

2. Was tun, wenn die rechte Maustaste nicht funktioniert?
Überprüfe deine Excel-Einstellungen und stelle sicher, dass keine anderen Add-Ins das Kontextmenü deaktivieren.

3. Ist RibbonX die bessere Wahl?
RibbonX ist eine moderne und flexible Methode, die jedoch nur in Office 2010 und neuer funktioniert. Es bietet mehr Anpassungsmöglichkeiten als das traditionelle Kontextmenü.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige