Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Multifunktionsleiste
#1
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.
Antworten Top
#2
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
[-] Folgende(r) 1 Nutzer sagt Danke an volti für diesen Beitrag:
  • HUBERTUSVON
Antworten Top
#3
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é
[-] Folgende(r) 1 Nutzer sagt Danke an mumpel für diesen Beitrag:
  • HUBERTUSVON
Antworten Top
#4
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.
Antworten Top
#5
Hallo Hubertus,

Du solltest hier mal (D)eine Mappe hochladen oder eine Beispielmappe, wo die entsprechenden Komponenten drin sind.

viele Grüße
Karl-Heinz
Antworten Top
#6

.xlsm   Test1.xlsm (Größe: 24,2 KB / Downloads: 2)
Antworten Top
#7
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
[-] Folgende(r) 1 Nutzer sagt Danke an volti für diesen Beitrag:
  • HUBERTUSVON
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste