Unable to change "Enabled" state of an Excel 2007 ribbon gallery b


B

basso profondo

Hi folks, Looking for help on this.
If we embed a button inside an excel 2007 ribbon gallery, it is not possible
to change its "Enabled" state after a workbook is opened and the gallery is
expanded. Only on workbook open the "getEnabled" callback is successfully
executed and the proper state is achieved. Following workbook open as well,
before the gallery is expanded, the state changes successfully. However once
the gallery is expanded the state cannot be changed.

Buttons that are not embedded in a gallery work just fine.

can be definitely seen on SP0 and SP2.

the xml file to customize the
ribbon:---------------------------------------------------------------------------------------------------------------

<!--
Here we have added a button and a gallery containing a button in the Home
tab of the excel ribbon.
We have grouped them under the "Enable Issue" group.
The two buttons "Will Change" and "Won't Change" both have the same
callback corresponding to the "getEnabled" property.
-->

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI onLoad="ribbonLoaded"
xmlns="http://schemas.microsoft.com/office/2006/01/customui">

<ribbon>

<tabs>

<tab idMso="TabHome" >

<group id="RDBGroup2" label="Enable Issue" >

<gallery id="IssueGallery" imageMso="DateAndTimeInsert"

label="Expand Me" columns="3" rows="4" onAction="InsertMonth" >

<button id="Disobedient" label="Won't Change"
getEnabled="GetEnabled" />

</gallery>

<button id="Obedient" label="Will Change"
getEnabled="GetEnabled" />



</group>

</tab>
</tabs>
</ribbon>

</customUI>

The VBA code that calls ribbon.invalidate

Option Explicit

Dim Rib As IRibbonUI
Public Enabled As Boolean

'Callback for customUI.onLoad
Sub ribbonLoaded(ribbon As IRibbonUI)
Set Rib = ribbon
End Sub

Sub GetEnabled(control As IRibbonControl, ByRef returnedVal)
returnedVal = Enabled
End Sub
Sub Set_Enabled()
Enabled = True
Rib.Invalidate
End Sub
Sub Set_Disabled()
Enabled = False
Rib.Invalidate
End Sub
 
Ad

Advertisements

A

Andy Pope

Hi,

Not sure I follow. You can change the state of the button within the
gallery by using the Invalidate method you have in your code.
But what I can not see is what you think should be causing the
Set_Enabled or Set_Disabled routines to run.

I added a routine which you had assigned to the galleries OnAction.
You will need to add an item to the gallery in order to raise the callback.

'---------
Public Sub InsertMonth(control As IRibbonControl, selectedId As String,
selectedIndex As Integer)
'
' Code for onAction callback. Ribbon control gallery
'
If Enabled Then
Set_Disabled
Else
Set_Enabled
End If

End Sub
'---------

The button in the gallery and on the ribbon will now alternate state.

Cheers
Andy
 
B

basso profondo

Thanks Andy,

I should have mentioned that I am explicitly calling the Set_Enabled and
Get_Enabled macros.
For some reason the onAction callback for the gallery is not getting called
in my case.
From some testing, this is what I deduce on how the getEnabled callbacks are
called for the different buttons.
(1) For the button outside the gallery it gets called when the ribbon is
invalidated (Happens properly on my Excel)
(2) For the button embedded in the gallery it gets called when the gallery
is expanded. In my case the issue seems to be that the callback is called
only on the first expansion of the gallery. It is not called thereafter.
Seems to be a systematic issue.
Also, the gallery onAction callback not being called is a little strange. I
am possibly going wrong somewhere, but I would rather concentrate on (2)
If it is possible could you test it on your side?

Regards.
 
A

Andy Pope

I will investigate further if you can email an example file. That way I
will not have to guess or make assumptions about what you actually have
setup.

andy AT andypope DOT info

Cheers
Andy
 
Ad

Advertisements


Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top