Estou lutando para limpar uma seleção suspensa via código VBA no Excel 2010. O motivo pelo qual quero fazer isso é porque o evento onAction não é acionado se você clicar no mesmo item consecutivamente sem alterar primeiro para outro item. / p>
Eu fiz algumas pesquisas e li que o método InvalidateControl limpa o valor em cache de um controle. Então, eu implementei e ...
Sub getUIHandle(ribbon As Office.IRibbonUI)
Set MyRibbon = ribbon
End Sub
----
Sub LabelCallback(control As IRibbonControl, id As String, index As Integer)
Select Case id
Case "CH1"
' take some action
Case "CH2"
' take some action
Case "CH3"
' take some action
Case "CH4"
' take some action
End Select
MyRibbon.InvalidateControl (control.id)
End Sub
Eu rastreei as chamadas e sei que meu sub getUIHandle está sendo chamado e que a chamada InvalidateControl está sendo chamada. Simplesmente não invalida o controle:)
Existe um método que limpa o valor atualmente selecionado de um controle DropDown RibbonX?
EDITAR:
Eu refatorei o código e mudei a sub-rotina LabelCallback para definir uma variável de estado, e ter um botão separado na Faixa de Opções realmente acionou as rotinas 'take some action', para contornar isso. Deselegante na minha opinião. (Atrevo-me a dizer desajeitado?) Faz muito mais sentido tomar a ação quando o item dropBox é selecionado, e funcionaria muito bem se o evento fosse disparado independentemente de qual item estivesse selecionado.