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

Forumthread: Ribbon ansprechen

Ribbon ansprechen
06.05.2013 16:20:37
Marc
Hallo zusammen,
ich habe vor kurzen schon Mal zu diesem Thema geschrieben. Inzwischen habe ich mir dank eurer Hilfe und dank der Internetsuche das meiste zusammengesucht. Ich habe aber noch ein Problem dabei den letzten Schritt zu tun.
Mein Ziel ist es, das Kontextmenü Ply auszublenden und nur auf Knopfdruck hin wieder einzublenden.
Hier ist der dazu gehörige XML Code



















Damit habe ich mir ein eigenes Kontextmenü erstellt, welches auch, wenn es sichtbar ist, funktioniert.
Mit dem folgenden VBA Code will ich die Elemente einzeln sichtbar machen können. Exemplarisch soll hier nur ein Element sichtbar gemacht werden. Die weiteren Elemente kommen später hinzu.
Sub MakeVisible()
Dim myCb As CommandBar
Dim ctrl As IRibbonControl
Set myCb = Application.CommandBars("ply")
Set ctrl = myCb.FindControl(ID:=889)'Dies ist der Menüpunkt "Umbenennen".
Call setVisible(ctrl, False)
End Sub
Sub setVisible(ByVal control As IRibbonControl, ByVal vis As Boolean)
vis = True
control.visible = vis
End Sub
Leider gibt mir Excel den Laufzeitfehler 13 zurück und behauptet, dass die Variable ctrl = Nothing ist. Ich nehme an, ich habe nicht den richtigen Code, um diese Variable zu füllen. Könnt Ihr mir helfen den richtigen Code für die Zeile:
Set ctrl = myCb.FindControl(ID:=889)
zu finden?
Vielen Dank schonmal im Voraus!
Liebe Grüße,
Marc

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ribbon ansprechen
06.05.2013 16:26:27
Marc
Nochmal der Versuch den XML Code zu posten:
customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"
ribbon startFromScratch="false" /
contextMenus
contextMenu idMso="ContextMenuWorkbookPly"
button visible="false" enabled="true" idMso="SheetInsertPage" label="Einfügen..." showLabel="false" /
button visible="false" enabled="true" idMso="SheetDelete" label="Löschen" showLabel="false" /
button visible="false" enabled="true" idMso="SheetRename" label="Umbenennen" showLabel="false" /
button visible="false" enabled="true" idMso="SheetMoveOrCopy" label="Verschieben oder kopieren..." showLabel="false" /
button visible="false" enabled="true" idMso="ViewVisualBasicCode" label="Code anzeigen" showLabel="false" /
button visible="false" enabled="true" idMso="SheetProtect" label="Blatt schützen..." showLabel="false" /
gallery visible="false" enabled="true" idMso="SheetTabColorGallery" label="Registerfarbe" showLabel="false" /
button visible="false" enabled="true" idMso="SheetTabColorMoreColorsDialog" label="Weitere Farben..." showLabel="false" /
button visible="false" enabled="true" idMso="SheetHide" label="Ausblenden" showLabel="false" /
button visible="false" enabled="true" idMso="SheetUnhide" label="Einblenden" showLabel="false" /
button visible="false" enabled="true" idMso="SelectAllSheets" label="Alle Blätter auswählen" showLabel="false" /
button visible="false" enabled="true" idMso="UngroupSheets" label="Gruppierung aufheben" showLabel="false" /
/contextMenu
/contextMenus
/customUI

Anzeige
AW: Ribbon ansprechen
06.05.2013 16:28:25
Rudi
Hallo,
Sub MakeVisible()
Dim myCb As CommandBar
Dim ctrl As CommandBarControl
Set myCb = Application.CommandBars("ply")
Set ctrl = myCb.FindControl(ID:=889) 'Dies ist der Menüpunkt "Umbenennen".
setVisible ctrl, True
End Sub
Sub setVisible(control As CommandBarControl, ByVal vis As Boolean)
'vis = True
control.Visible = vis
End Sub

Gruß
Rudi

Anzeige
darüber hinaus ...
06.05.2013 16:42:48
Rudi
Hallo,
würde ich das nicht per xml machen, sondern per VBA
Sub ausblenden()
Dim myCb As CommandBar
Dim ctrl As CommandBarControl
Set myCb = Application.CommandBars("ply")
With myCb
For Each ctrl In .Controls
ctrl.Visible = False
Next
End With
End Sub

Gruß
Rudi

Anzeige
AW: Ribbon ansprechen
06.05.2013 18:22:15
mumpel
Hallo!
Wie bereits erwähnt, musst Du mit getVisible arbeiten.
Der VBA-Code:
Der RibbonX-Code:
Gruß, René

AW: Ribbon ansprechen
07.05.2013 14:04:01
Marc
Hallo Mumpel,
vielen Dank für diesen Ansatz. Das wirft aber mein Konzept völlig über den Haufen. Ich ein Makro in der Datei, welches dem Kontextmenü einen Button hinzufügt. Das funktioniert super. Der Button ruft ein selbst gemachtes Formular auf. Dieses Formular fragt ein Passwort ab und bei richtiger Eingabe sollen die nicht sichtbaren Punkte eingeblendet werden sowie der hinzugefügte Button entfernt und gegen einen anderen ausgetauscht werden, der das Menü wieder verstecken kann.
Das funktioniert auch alles sehr gut, außer der Tatsache, dass die unsichtbaren Menüpunkte aus dem CustomUI nicht sichtbar werden. Nur dafür brauche ich eine Lösung. Mit dem Code, den Du gepostet hast, komme ich da aber nicht weiter.
Grüße,
Marc

Anzeige
AW: Ribbon ansprechen
07.05.2013 17:11:17
mumpel
Das ist doch gar kein Problem. Nutze eine Variable vom Typ Boolean. Diese wird mit einer Schaltfläche ein- oder ausgeschaltet, anschließend das Ribbon aktualisiert. Die Schaltfläche musst Du noch im RibbonX-Code integrieren, das mache ich jetzt nicht.
Das ist nur ein Beispielcode. Den musst Du natürlich für Dein Projekt umsetzen. Den Code für die Schaltfläche kannst Du auch in einer Formularschaltfläche nutzen, der ist nicht auf Ribbon-Callbacks beschränkt.

Anzeige
Nachtrag
07.05.2013 17:15:44
mumpel
Du kannst es natürlich auch per VBA machen, wie Rudi schon vorschlug. Die Kontextmenüs lassen sich auch weiterhin mit VBA beeinflussen.

AW: Nachtrag
07.05.2013 17:20:24
Marc
Hallo Mumpel,
nein, das Ply Menü eben nicht. Es lassen sich Teile hinzufügen. Aber die vorhandenen Einträge lassen sich nicht einfach ausblenden. Das Cells Menü lässt sich prima bearbeiten. Das Ply leider nicht. Ich brauche nur den Hinweis, wie ich aus dem VBA Code heraus die Sichtbarkeit der von mir erstellten Menüpunkte über das RibbonX mit der GetVisible Anweisung beeinflusse.
Grüße,
Marc

Anzeige
AW: Nachtrag
07.05.2013 18:24:52
mumpel
Das habe ich Dir doch schon aufgezeigt. Ist das so schwer zu verstehen?
;
Anzeige
Anzeige

Infobox / Tutorial

Ribbon ansprechen in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Erstelle das RibbonX Code: Zuerst musst du den XML-Code für dein Ribbon anlegen. Dies ist notwendig, um das Excel Ribbon über VBA zu steuern. Hier ist ein Beispiel, wie dein customUI aussehen könnte:

    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
      <ribbon startFromScratch="false">
        <contextMenus>
          <contextMenu idmso="ContextMenuWorkbookPly">
            <!-- Deine buttons hier -->
          </contextMenu>
        </contextMenus>
      </ribbon>
    </customUI>
  2. VBA Code zur Steuerung des Ribbons: Verwende den folgenden VBA-Code, um die Sichtbarkeit der Menüeinträge zu steuern.

    Sub MakeVisible()
        Dim myCb As CommandBar
        Dim ctrl As IRibbonControl
        Set myCb = Application.CommandBars("ply")
        Set ctrl = myCb.FindControl(ID:=889) ' ID für "Umbenennen"
        Call setVisible(ctrl, True)
    End Sub
    
    Sub setVisible(ByVal control As IRibbonControl, ByVal vis As Boolean)
        control.Visible = vis
    End Sub
  3. Aktualisiere das Ribbon: Wenn du die Sichtbarkeit eines Controls ändern möchtest, musst du das Ribbon aktualisieren, um die Änderungen zu sehen. Dies kannst du mit der Methode Invalidate tun:

    Application.CommandBars("ply").Controls("Umbenennen").Visible = True
    Application.CommandBars("ply").Invalidate

Häufige Fehler und Lösungen

  • Laufzeitfehler 13 (Typen unverträglich): Dieser Fehler tritt auf, wenn ctrl auf Nothing gesetzt ist. Stelle sicher, dass die ID korrekt ist und dass das Control im Ribbon existiert. Überprüfe auch, ob das Ribbon korrekt geladen wurde.

  • Control nicht sichtbar: Wenn du ein Control nicht sichtbar machen kannst, stelle sicher, dass du getVisible im RibbonX-Code korrekt implementierst, um die Sichtbarkeit zu steuern.


Alternative Methoden

Falls du das Ribbon nicht über XML steuern möchtest, kannst du auch VBA verwenden, um die Sichtbarkeit der Ribbon-Controls zu ändern. Hier ein Beispiel, wie du das gesamte Kontextmenü ausblenden kannst:

Sub ausblenden()
    Dim myCb As CommandBar
    Dim ctrl As CommandBarControl
    Set myCb = Application.CommandBars("ply")
    For Each ctrl In myCb.Controls
        ctrl.Visible = False
    Next
End Sub

Diese Methode ist einfach und direkt, erfordert jedoch, dass du die Controls manuell verwaltest.


Praktische Beispiele

Hier ist ein Beispiel, wie du einen Button im Ribbon hinzufügen und dessen Sichtbarkeit steuern kannst. Du kannst einen Button hinzufügen, der ein Passwort abfragt und basierend auf der Eingabe die Sichtbarkeit anderer Buttons steuert.

Sub PasswortAbfrage()
    Dim Passwort As String
    Passwort = InputBox("Bitte Passwort eingeben:")
    If Passwort = "deinPasswort" Then
        Application.CommandBars("ply").Controls("Umbenennen").Visible = True
        Application.CommandBars("ply").Invalidate
    Else
        MsgBox "Falsches Passwort!"
    End If
End Sub

Tipps für Profis

  • Verwende IRibbonControl für mehr Flexibilität beim Arbeiten mit Ribbon-Controls in VBA.
  • Stelle sicher, dass alle IDs korrekt sind und dass du die getVisible-Methode im RibbonX-Code implementierst, um die Sichtbarkeit dynamisch zu steuern.
  • Teste deine XML und VBA-Codes regelmäßig, um sicherzustellen, dass alle Änderungen wie gewünscht funktionieren.

FAQ: Häufige Fragen

1. Wie kann ich ein neues Control im Ribbon hinzufügen? Du kannst ein neues Control hinzufügen, indem du es im XML-Code definierst. Verwende die entsprechenden idMso-Attribute, um die gewünschten Funktionen zu verknüpfen.

2. Was ist der Unterschied zwischen CommandBar und IRibbonControl? CommandBar ist eine ältere Schnittstelle zur Steuerung von Menüs in Excel. IRibbonControl ist die neuere Schnittstelle, die speziell für das Arbeiten mit dem Excel Ribbon entwickelt wurde und mehr Funktionen bietet.

3. Wie kann ich ein Custom Ribbon in Excel speichern? Um ein Custom Ribbon zu speichern, musst du die Datei als Excel-Dokument (.xlsm) speichern, das Makros unterstützt. Der RibbonX-Code wird in der Datei gespeichert und beim nächsten Öffnen geladen.

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