RibbonX-Workshop - Splitbutton
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>