
Estou lutando para limpar uma seleção suspensa por meio do 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 mudar para outro item primeiro.
Fiz algumas pesquisas e li que o método InvalidateControl limpa o valor armazenado 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
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:
Refatorei o código e alterei a sub-rotina LabelCallback para definir uma variável de estado e fiz com que um botão separado na faixa de opções acionasse as rotinas de 'executar algumas ações' para contornar isso. Deselegante na minha opinião. (Ouso dizer desajeitado?) Faz muito mais sentido executar a ação quando o item dropBox é selecionado e funcionaria perfeitamente se o evento fosse acionado independentemente de qual item estivesse selecionado.