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

Ribbon Befehle abhängig deaktivieren

Forumthread: Ribbon Befehle abhängig deaktivieren

Ribbon Befehle abhängig deaktivieren
27.04.2021 17:27:41
ObiWanPaps
Hallo zusammen, bei https://www.herber.de/forum/cgi-bin/callthread.pl?index=1826305 wurde mir mit den gegebenen Hinweis sehr geholfen.
Ich habe mich auch bereits etwas in die RibbonX Technik eingearbeitet. Allerdings finde ich für mein Problem bisher nicht die passende Lösung, wenn es überhaupt eine gibt an der Stelle. Wie man Arbeitsblatt abhängig unterschiedliche (neue) Tabs einblenden kann, habe ich bereits gebaut. Auf 3 Blättern erscheinen jeweils unterschiedliche, eigene Tabs mit Gruppen und Befehlen.
Ich würde allerdings nun gerne statt der drei einzelnen, diese in einem eigenen Tab zusammenfassen wollen. Es soll dann aus mehreren Gruppen (aus den heutigen einzelnen Tabs) und Buttons bestehen, bei dem dann Arbeitsblattabhängig nur einzelne Gruppen/Button deaktiviert (nicht ausgeblendet) werden. Geht das überhaupt, dass ich in einem eigens kreierten neuen Tab einzelne Befehle arbeitsblattabhängig deaktiviere? Oder muss ich bei der "3-Tabs Variante" bleiben?
Kennt hier jemand eine Lösung bzw. hat eine Antwort auf die Frage "Geht das überhaupt?". Vielen Dank.
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachtrag
27.04.2021 17:36:00
mumpel
Was in diesem Teil des Workshops steht geht natürlich auch mit einzelnen Elementen und Gruppen. Einfach mal ausprobieren.
AW: Nachtrag
28.04.2021 22:25:55
ObiWanPaps
Hallo mumpel, danke. Diesen Workshop habe ich auch schon gesehen und angefangen damit zu arbeiten. Ich habe auch eine Lösung für jedes Blatt einen eigenen Tab. Allerdings bin ich eher auf der Suche, ein Tab für alle Blätter und nur einzelne Gruppen deaktiviert (nicht ausgeblendet).
Ich habe dazu auch angefangen den Workshop https://www.rholtz-office.de/ribbonx/sichtbarkeit-der-elemente zu studieren.
Komme aber nicht weiter, da ich nicht in Abhängigkeit von Zellinhalten sondern in Abhängigkeit vom ausgewählten Blatt Gruppen deaktivieren möchte.
Da fehlt es mir aber an KnowHow.
Ich habe es so versucht:

Public Sub getEnabled_Button1(control As IRibbonControl, ByRef returnValue)
If ActiveSheet.Name = "Tabelle9" Then returnValue = True
End Sub
So funktioniert es aber nicht. Ich meine auch das ich alle notwendigen VBA Project Verweise ausgewählt habe. Da aber nicht mal das Beispiel bei mir scheint ja noch etwas zu fehlen. Hat jemand die notwendigen Verweise für RibbonX und wie muss der korrekte Befehl lauten, damit bei ausgewähltem Tabellenblatt "Tabelle9" die Schaltfläche Button1 aktiv ist und in den anderen Blätter deaktiviert ist.
Danke.
Anzeige
AW: Nachtrag
28.04.2021 22:27:19
ObiWanPaps
Komme so nicht weiter... ;-(
AW: Nachtrag
28.04.2021 23:04:24
mumpel
Wie bereits per Email gesagt, kümmere ich mich morgen drum (wenn ich ausgeschlafen habe, bin noch bis 01:15 Uhr auf Dienst).
AW: Nachtrag
29.04.2021 08:40:00
Stefan
Moin, ja. Danke!
Anzeige
AW: Nachtrag
29.04.2021 11:32:48
mumpel
XML-Code:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onLoad_Tab9">
    <ribbon>
        <tabs>
            <tab id="tab0" label="Mein Tab">
                <group id="grp0" label="Meine Gruppe">
                    <button id="btn0" label="Button 1" imageMso="HappyFace"
                            size="large" onAction="onAction_Button1"
                            getEnabled="GetEnabled_Button1" />
                    <button id="btn1" label="Button 2"
                            imageMso="AutoDial" size="large" onAction="onAction_Button1" />
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

VBA/HTML-CodeConverter, AddIn für Excel 2002-2019 (32-bit) und Excel 365 (32-bit Desktop-Version)
In VBA geschrieben von Lukas Mosimann. Projektbetreuung: René Holtz


Code erstellt und getestet in Excel 365 32-bit Desktopversion
Codedarstellung mit VBAHTML 12.6.0 erstellt.

VBA-Codes:
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 Excel 2002-2019 (32-bit) und Excel 365 (32-bit Desktop-Version)
In VBA geschrieben von Lukas Mosimann. Projektbetreuung: René Holtz


Code erstellt und getestet in Excel 365 32-bit Desktopversion
Codedarstellung mit VBAHTML 12.6.0 erstellt.

In ein allgemeines Modul:
Option Private Module
Option Explicit

Public objRibbon As IRibbonUI

Public Sub onLoad_Tab9(ribbon As IRibbonUI)
  Set objRibbon = ribbon
End Sub

Public Sub getEnabled_Button1(control As IRibbonControl, ByRef returnedValue)
 If ActiveSheet.Name = "Tabelle9" Then returnedValue = 1
End Sub
Public Sub onAction_Button1(control As IRibbonControl)
 MsgBox "Button " & control.ID & " gedrückt", 64, "Hinweis"
End Sub

VBA/HTML-CodeConverter, AddIn für Excel 2002-2019 (32-bit) und Excel 365 (32-bit Desktop-Version)
In VBA geschrieben von Lukas Mosimann. Projektbetreuung: René Holtz


Code erstellt und getestet in Excel 365 32-bit Desktopversion
Codedarstellung mit VBAHTML 12.6.0 erstellt.


Anzeige
AW: Nachtrag
29.04.2021 16:13:44
Stefan
Hallo mumpel, das hat jetzt super geklappt! Vielen Dank dafür. Es tut was es tun soll! Grüße
;
Anzeige
Anzeige

Infobox / Tutorial

Ribbon-Befehle abhängig deaktivieren


Schritt-für-Schritt-Anleitung

Um Ribbon-Befehle in Excel abhängig von dem aktiven Arbeitsblatt zu deaktivieren, kannst Du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf dein Projekt im Projektfenster und wähle Einfügen > Modul.
  3. Ribbon XML hinzufügen: Füge den XML-Code für das Ribbon in dein Projekt ein. Der XML-Code sollte in einer Datei namens customUI.xml gespeichert werden. Beispiel:
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onLoad_Tab9">
        <ribbon>
            <tabs>
                <tab id="tab0" label="Mein Tab">
                    <group id="grp0" label="Meine Gruppe">
                        <button id="btn0" label="Button 1" imageMso="HappyFace" size="large" onAction="onAction_Button1" getEnabled="getEnabled_Button1"/>
                        <button id="btn1" label="Button 2" imageMso="AutoDial" size="large" onAction="onAction_Button1"/>
                    </group>
                </tab>
            </tabs>
        </ribbon>
    </customUI>
  4. VBA-Codes implementieren: Füge den folgenden VBA-Code in das Modul ein:

    Public objRibbon As IRibbonUI
    
    Public Sub onLoad_Tab9(ribbon As IRibbonUI)
        Set objRibbon = ribbon
    End Sub
    
    Public Sub getEnabled_Button1(control As IRibbonControl, ByRef returnedValue)
        If ActiveSheet.Name = "Tabelle9" Then
            returnedValue = True
        Else
            returnedValue = False
        End If
    End Sub
    
    Public Sub onAction_Button1(control As IRibbonControl)
        MsgBox "Button " & control.ID & " gedrückt", vbInformation, "Hinweis"
    End Sub
    
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
        If Not objRibbon Is Nothing Then objRibbon.Invalidate
    End Sub
  5. Speichern und Testen: Speichere Deine Arbeit und teste die Funktionalität, indem Du zwischen den Blättern wechselst.

Häufige Fehler und Lösungen

  • Fehler: Schaltfläche wird nicht aktiviert/deaktiviert
    Lösung: Stelle sicher, dass der Name des Arbeitsblatts korrekt im getEnabled_Button1-Code angegeben ist. Überprüfe auch, ob der XML-Code korrekt in die Datei eingebettet wurde.

  • Fehler: Ribbon wird nicht angezeigt
    Lösung: Überprüfe, ob Du die Excel-Toolbar korrekt einblendest. Möglicherweise ist es notwendig, Excel neu zu starten, nachdem Du Änderungen am Ribbon vorgenommen hast.


Alternative Methoden

Eine alternative Methode zur Verwaltung von Ribbon-Befehlen ist die Verwendung von Excel VBA Ribbon Controls. Anstatt die Sichtbarkeit von Schaltflächen zu steuern, kannst Du auch die Benutzeroberfläche dynamisch anpassen, indem Du verschiedene Tabs basierend auf den Benutzeraktionen einblendest oder ausblendest.


Praktische Beispiele

Ein praktisches Beispiel zur Verwendung von vba ribbon control:

  • Wenn Du einen Button für jedes Arbeitsblatt haben möchtest, der nur auf einem bestimmten Blatt aktiv ist, kannst Du die oben genannten Codes anpassen, um unterschiedliche Namen für verschiedene Blätter zu verwenden.

Tipps für Profis

  • Nutze das Invalidate-Verfahren, um das Ribbon bei Änderungen sofort zu aktualisieren, was die Benutzererfahrung verbessert.
  • Experimentiere mit verschiedenen getEnabled-Methoden, um komplexe Logiken für die Aktivierung und Deaktivierung von Schaltflächen zu implementieren.

FAQ: Häufige Fragen

1. Frage
Wie kann ich mehrere Buttons gleichzeitig aktivieren oder deaktivieren?
Antwort: Du kannst im getEnabled-Code mehrere Bedingungen einfügen, um verschiedene Buttons auf einmal zu steuern.

2. Frage
Funktioniert dieser Code in allen Excel-Versionen?
Antwort: Der Code wurde in Excel 365 getestet und funktioniert am besten in dieser Version. Ältere Versionen könnten Unterschiede in der Unterstützung der RibbonX-Technik aufweisen.

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