RibbonX-Workshop - Splitbutton

 In diesem Teil lernen wir den Splitbutton kennen. Dieses Element wird selten genutzt. SplitButton können genutzt werden, wenn nicht genügend Platz auf dem Ribbon vorhanden ist.

Ein Splitbutton ist in zwei Teile aufgeteilt. Dem Button und dem Menü. Dem Button wird dabei das aus dem Splitbutton-Menü zuletzt genutzte Makro zugewiesen. Normalerweise ist diese Zuweisung temporär, geht also beim Schließen der Arbeitsmappe verloren. Damit dies nicht geschied, nutzen wir wieder die DocumentProperties. Zu diesem Zweck wird ein neuer Eintrag in den DocumentProperties angelgt. Anders als bei Umschaltflächen muss der Eintrag in diesem Fall vom Typ String sein. Für jeden Splitbutton benötigen Sie einen eigenen Eintrag.

Erstellen Sie eine neue Arbeitsmappe (*.xslm). Fügen Sie ein neues Modul und in dieses das folgende Makro ein. Führen Sie selbiges einmalig aus. Danach können Sie es wieder löschen.

Sub DocumentProbertieFürToggleButtonAnlegen()
    ActiveWorkbook.CustomDocumentProperties.Add Name:="SplitButton01", _
          LinkToContent:=False, Type:=msoPropertyTypeString, Value:="Spalte A"
End Sub


Fügen Sie anschließend die folgenden Makros ein.

Option Explicit

Dim objRibbon As IRibbonUI
Dim strLabel As String

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

Public Sub SplitButton_getLabel(control As IRibbonControl, ByRef label)
  If strLabel = "" Then strLabel = ThisWorkbook.CustomDocumentProperties("SplitButton01").Value
     label = strLabel
End Sub

Public Sub SplitButton_onAction(control As IRibbonControl)
  SplitMacro strLabel
End Sub
Public Sub SplitMenüButton_onAction(control As IRibbonControl)
  Select Case control.ID
         Case "btn01"
              strLabel = "Spalte A"
              ThisWorkbook.CustomDocumentProperties("SplitButton01").Value = "Spalte A"
              SplitMacro strLabel
         Case "btn02"
              strLabel = "Spalte B"
              ThisWorkbook.CustomDocumentProperties("SplitButton01").Value = "Spalte B"
              SplitMacro strLabel
         Case "btn03"
              strLabel = "Spalte C"
              ThisWorkbook.CustomDocumentProperties("SplitButton01").Value = "Spalte C"
              SplitMacro strLabel
         End Select
  objRibbon.Invalidate
End Sub

Private Sub SplitMacro(ByVal label As String)
   Select Case strLabel
          Case "Spalte A"
               If Columns("A:A").EntireColumn.Hidden = False Then
                  Columns("A:A").EntireColumn.Hidden = True
               Else
                  Columns("A:A").EntireColumn.Hidden = False
               End If
          Case "Spalte B"
               If Columns("B:B").EntireColumn.Hidden = False Then
                  Columns("B:B").EntireColumn.Hidden = True
                Else
                  Columns("B:B").EntireColumn.Hidden = False
                End If
          Case "Spalte C"
               If Columns("C:C").EntireColumn.Hidden = False Then
                 Columns("C:C").EntireColumn.Hidden = True
               Else
                 Columns("C:C").EntireColumn.Hidden = False
               End If
   End Select
End Sub


Speichern und schließen Sie jetzt die Arbeitsmappe und öffnen Sie sie mit dem CustomUI-Editor. Fügen Sie dann den folgenden Code in das Codefenster ein.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="rx_onLoad">
  <ribbon startFromScratch="true">
    <tabs>
      <tab id="tab01" label="Mein Tab">
        <group id="grpDemo" label="SplitButton Demo">
          <splitButton id="spbImage" size="large"  >
             <button id="btnImage" getLabel="SplitButton_getLabel" onAction="SplitButton_onAction"
                     imageMso="TableSharePointListsModifyColumnsAndSettings"/>
             <menu id="menSbt01">
                   <button id="btn01" label="Spalte A" onAction="SplitMenüButton_onAction"/>
                   <button id="btn02" label="Spalte B" onAction="SplitMenüButton_onAction"/>
                   <button id="btn03" label="Spalte C" onAction="SplitMenüButton_onAction"/>
             </menu>
          </splitButton>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>