Ich habe ein Custom Ribbon erstellt mit 2 Buttons, funktioniert soweit auch wunderbar. Jetzt möchte ich wenn ich auf Button1 ( Import) klicke sich dieser deaktiviert. Wenn ich Button 2 (Export) klicke soll der Button1 wieder aktiviert sein.
Hallo Hubertus,
hier mal eine Idee.
Zunächst einmal musst Du Dir eine Objektvariable für den Ribbon besorgen, um später darauf zugreifen zu können. Hierzu ist im XML-Code die onLoad-Funktionalität einzubauen. s.Beispiel.
Dann sicherstellen, dass ein Getenabled-Event für den Button1 ausgelöst werden kann und eine Callback-Funktion dazu angeben.
Ein (ungetestes) Beispiel für den XML-Code
Code:
<customUI
xmlns="
http://schemas.microsoft.com/office/2006/01/customui"
onLoad="
cbRibbonInit"
><button
id="
btnListe1"
onAction="
cbBtn_OnAction"
label="
Labeltext1"
imageMso="
DataRefreshAll"
size="
large"
getEnabled="
cbBtn_enabled"
/><button
id="
btnListe2"
onAction="
cbBtn_OnAction"
label="
Labeltext2"
imageMso="
DataRefreshAll"
size="
large"
/>
Im zugehörigen VBA-Code würde ich mir eine globale Variable zur Aufnahme des gewünschten Buttonzustandes anlegen, diese in der OnAction-Sub der beiden Buttons entsprechend setzen und in der Callback-Funktion für Getenabled zum Setzen des Buttonzustandes Button1 verwenden.
Ein (ungetestetes) Beispiel für den VBA-Code:
Code:
Dim bButton1Enabled As Boolean
Dim myRibbon As IRibbonUI
Sub cbRibbonInit(Ribbon As IRibbonUI)
'Objektvariable auf das Ribbon-Objekt setzen
Set myRibbon = Ribbon
End Sub
Sub cbBtn_OnAction(control As IRibbonControl)
Select Case control.ID
Case "btnListe1"
bButton1Enabled = False
myRibbon.InvalidateControl "btnListe1"
Case "btnListe2"
bButton1Enabled = True
myRibbon.InvalidateControl "btnListe1"
End Select
End Sub
Sub cbBtn_enabled(control As IRibbonControl, ByRef enabled)
Select Case control.ID
Case "btnListe1": enabled = bButton1Enabled
End Select
End Sub
_________
viele Grüße
Karl-Heinz
Hallo!
Hinweis:
Da "bButton1Enabled" beim Öffnen der Arbeitsmappe False ist, muss man sie beim Öffnen über Workbook_Open erst noch auf True setzen (ist kein Problem, da Ereignis-Makros zuerst abgearbeitet werden).
Gruß, René
Nach vielen Versuchen die Buttons "bButton1Enabled" die beim Öffnen der Arbeitsmappe deaktiviert sind wieder zu aktivieren sind gescheitert.
Wie aktiviere ich die Buttons? Mir fehlen hier einfach die nötigen Kenntnisse.
Für die Hilfe bin ich sehr dankbar.
Hallo Hubertus,
Du solltest hier mal (D)eine Mappe hochladen oder eine Beispielmappe, wo die entsprechenden Komponenten drin sind.
viele Grüße
Karl-Heinz
Hallo Hubertus,
Du hast Dich leider nicht an meine und Rene's Empfehlung gehalten...
Außerdem hast Du auch den zweiten Button mit der Aktiv-Schaltemöglichkeit versehen, ohne die entsprechenden Variablen but1 und but2 beim Öffnen der Mappe auf true zu setzen.
Dadurch waren beide Button inaktiv und eine Einschaltmöglichkeit nicht mehr gegeben.
Die Invalidate-Funktion muss nach jeder but1/2 -Änderung gestartet werden, damit die Callbacks wieder ausgeführt werden und nicht nur beim Starten der Mappe.
Nachfolgend mal Dein Code für eine Toggleschaltung angepasst (Vorschlag).
Ich empfehle Dir auch, spätestens beim Wirkbetrieb sprechende Callbackfunktionsnamen zu verwenden. Makro1 und Makro2 fällt sicher nicht darunter.
Hinweis: Wenn beim Aufbau Deiner weiteren Programmierung Deines Tools ein Fehler auftreten sollte, ist auch die Variable gobjRibbon kaputt und kein Zugriff auf die Button mehr möglich. Dann muss ds Tool neu gestartet werden.
Code:
Option Private Module
Option Explicit
Public gobjRibbon As IRibbonUI
Public but1 As Boolean
Public but2 As Boolean
Public Sub OnRibbonLoad(Ribbon As IRibbonUI)
Set gobjRibbon = Ribbon
End Sub
'Callback for but1 getEnabled
Sub GetEnabled_but1(control As IRibbonControl, ByRef returnedVal)
returnedVal = but1
End Sub
'Callback for but2 getEnabled
Sub GetEnabled_but2(control As IRibbonControl, ByRef returnedVal)
returnedVal = but2
End Sub
Sub Makro1(control As IRibbonControl)
but1 = False
but2 = True
gobjRibbon.Invalidate
End Sub
Sub Makro2(control As IRibbonControl)
but1 = True
but2 = False
gobjRibbon.Invalidate
End Sub
Private Sub Workbook_Open()
but1 = True
but2 = True
End Sub
_________
viele Grüße
Karl-Heinz