RibbonX-Workshop - Umschaltflächen

In diesem Teil wollen wir eine Umschaltfläche (ToggleButton) erstellen. Hierfür wird folgender RibbonX-Code verwendet. Der Beispielcode erstellt eine Schaltfläche.

Bei Umschaltflächen muss der jeweilig Zustand gespeichert werden, damit dieser beim erneuten Öffnen der Arbeitsmappe wieder zur Verfügung steht. Ohne speichern des Zustandes geht selbiger beim Schließen der Arbeitsmappe verloren. Es gibt mehrere Möglichkeiten, den Zustand zu speichern. Die Registry, eine INI-Datei, eine Textdatei, in einer Zelle der Arbeitsmappe oder die DocumentProperties. Da letzteres am geeignetsten erscheint, wird hier dieses Beispiel vorgestellt.

Erstellen Sie eine neue Arbeitsmappe und speichern Sie diese mit der Endung *.xlsm. Fügen Sie ein neues Modul ein, in welches Sie die folgendes Makro kopieren. Mit diesem wird ein neur Eintrag in den DocProperties erstellt. Für jede Umschaltfläche benötigen Sie einen eigenen Eintrag. Nach dem Erstellen des Eintrages können Sie das Makro wieder löschen.

Sub DocumentProbertieFürToggleButtonAnlegen()
    ActiveWorkbook.CustomDocumentProperties.Add Name:="ToggleButton01", _
                   LinkToContent:=False, Type:=msoPropertyTypeNumber, Value:=0
End Sub


Nachdem Sie den Eintrag erstellt haben, fügen Sie die folgenden Makros in ein Standardmodul ein.

Option Private Module
Public objRibbon As IRibbonUI

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

Sub ToggleButton_getPressed(control As IRibbonControl, ByRef returnedValue)
    returnedValue = ThisWorkbook.CustomDocumentProperties("ToggleButton01").Value
End Sub

Sub ToggleButton_onAction(control As IRibbonControl, pressed As Boolean)
    If ThisWorkbook.CustomDocumentProperties("ToggleButton01").Value = 0 Then
       ActiveWorkbook.CustomDocumentProperties("ToggleButton01").Value = 1
       objRibbon.Invalidate
       MsgBox "Umschaltfläche 1 eingerastet", vbOKOnly + vbInformation, "Hinweis"
       ThisWorkbook.Save
    Else
       ActiveWorkbook.CustomDocumentProperties("ToggleButton01").Value = 0
       objRibbon.Invalidate
       MsgBox "Umschaltfläche 1 ausgerastet", vbOKOnly + vbInformation, "Hinweis"
       ThisWorkbook.Save
    End If
End Sub

Sub ToggleButton_getLabel(control As IRibbonControl, ByRef label)
    If ThisWorkbook.CustomDocumentProperties("ToggleButton01").Value = 1 Then
       label = "Umschaltfläche 1 eingerastet"
    Else
       label = "Umschaltfläche 1 ausgerastet"
    End If
End Sub


Speichern Sie jetzt die Änderungen und schließen die Arbeitsmappe. Öffnen Sie die Arbeitsmappe mit dem CustomUI-Editor und fügen Sie in das Codefenster folgenden Code ein.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="onload">
  <ribbon startFromScratch="true">
    <tabs>
      <tab id="tab01" label="Umschaltflächen">
        <group id="grp01" label="Zustand in DocumentProperties" >
           <toggleButton id="tgb01" getLabel="ToggleButton_getLabel" imageMso="ExchangeFolder" getPressed="ToggleButton_getPressed" 
                         onAction="ToggleButton_onAction" size="large"/> </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>


Beschreibung:

id: Gibt die control.ID an
getLabel: Das Makro, welches die Beschriftung je nach Zustand der Schaltfläche angibt.
size: größe der Schaltfläche. large=groß, normal=klein.
imageMso: Gibt das Icon an, welches genutzt werden soll.
getPressed: Fragt beim Öffnen der Arbeitsmappe den Wert für den Zustand aus dem gespeicherten Wert ab. Bei 1 wird die Schaltfläche gedrückt.
onAction: Das auszuführende Makro.