This is in the attached XLSM, but I saved it as an XLAM and it seems to work OK
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnRibbonLoad" >
<ribbon>
<tabs>
<tab id="CustomTab" label="My Tab">
<group id="gMaster" label="Master Group">
<toggleButton id="tbA"
size="large"
imageMso="A"
getLabel="getToggleLabel"
getPressed="getTogglePressed"
onAction="onToggleAction"
screentip = "This hides or shows Group A"
/>
<toggleButton id="tbB"
size="large"
imageMso="B"
getLabel="getToggleLabel"
getPressed="getTogglePressed"
onAction="onToggleAction"
screentip = "This hides or shows Group B"
/>
<toggleButton id="tbC"
size="large"
imageMso="C"
getLabel="getToggleLabel"
getPressed="getTogglePressed"
onAction="onToggleAction"
screentip = "This hides or shows Group C"
/>
</group>
<group id="gA" label="Group A" getVisible = "getGroupVisible">
<button id="bA1" label="FirstA" size="large" onAction="actionButton" imageMso="HappyFace"/>
<button id="bA2" label="SecondA" size="large" onAction="actionButton" imageMso="HappyFace" />
<button id="bA3" label="ThirdA" size="large" onAction="actionButton" imageMso="HappyFace" />
</group >
<group id="gB" label="Group B" getVisible = "getGroupVisible">
<button id="bB1" label="FirstB" size="large" onAction="actionButton" imageMso="HappyFace"/>
<button id="bB2" label="SecondB" size="large" onAction="actionButton" imageMso="HappyFace"/>
<button id="bB3" label="ThirdB" size="large" onAction="actionButton" imageMso="HappyFace"/>
</group >
<group id="gC" label="Group C" getVisible = "getGroupVisible">
<button id="bC1" label="FirstC" size="large" onAction="actionButton" imageMso="HappyFace"/>
<button id="bC2" label="SecondC" size="large" onAction="actionButton" imageMso="HappyFace"/>
<button id="bC3" label="ThirdC" size="large" onAction="actionButton" imageMso="HappyFace"/>
</group >
</tab>
</tabs>
</ribbon>
</customUI>
and
Option Explicit
Public bVisibleA As Boolean, bVisibleB As Boolean, bVisibleC As Boolean
Public bPressedA As Boolean, bPressedB As Boolean, bPressedC As Boolean
Public oRibbon As IRibbonUI
'Callback for customUI.onLoad
Sub OnRibbonLoad(ribbon As IRibbonUI)
Set oRibbon = ribbon
bVisibleA = False
bVisibleB = False
bVisibleC = False
bPressedA = False
bPressedB = False
bPressedC = False
End Sub
'Callback for tbA getLabel
Sub getToggleLabel(control As IRibbonControl, ByRef returnedVal)
Select Case control.ID
Case "tbA"
If bVisibleA Then
returnedVal = "Hide A"
Else
returnedVal = "Show A"
End If
Case "tbB"
If bVisibleB Then
returnedVal = "Hide B"
Else
returnedVal = "Show B"
End If
Case "tbC"
If bVisibleC Then
returnedVal = "Hide C"
Else
returnedVal = "Show C"
End If
End Select
End Sub
'Callback for tbA getPressed
Sub getTogglePressed(control As IRibbonControl, ByRef returnedVal)
Select Case control.ID
Case "tbA"
returnedVal = bPressedA
Case "tbB"
returnedVal = bPressedB
Case "tbC"
returnedVal = bPressedC
End Select
End Sub
'Callback for tbA onAction
Sub onToggleAction(control As IRibbonControl, pressed As Boolean)
Select Case control.ID
Case "tbA"
bPressedA = Not bPressedA
bVisibleA = Not bVisibleA
oRibbon.Invalidate
Case "tbB"
bPressedB = Not bPressedB
bVisibleB = Not bVisibleB
oRibbon.Invalidate
Case "tbC"
bPressedC = Not bPressedC
bVisibleC = Not bVisibleC
oRibbon.Invalidate
End Select
End Sub
'Callback for gA getVisible
Sub getGroupVisible(control As IRibbonControl, ByRef returnedVal)
Select Case control.ID
Case "gA"
returnedVal = bVisibleA
Case "gB"
returnedVal = bVisibleB
Case "gC"
returnedVal = bVisibleC
End Select
End Sub
'Callback for bA1 onAction
Sub actionButton(control As IRibbonControl)
MsgBox "You clicked " & control.ID
End Sub