
Excel 2010 で VBA コードを使用してドロップダウンの選択をクリアするのに苦労しています。これを行う理由は、最初に別の項目に変更せずに同じ項目を連続してクリックすると、onAction イベントが発生しないためです。
調べてみると、InvalidateControl メソッドはコントロールのキャッシュされた値をクリアすると書いてありました。そこで、それを実装してみたのですが...
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
呼び出しをトレースしたところ、getUIHandle サブが呼び出され、InvalidateControl 呼び出しが呼び出されていることがわかりました。コントロールが無効になるわけではありません : )
dropDown RibbonX コントロールの現在選択されている値をクリアする方法はありますか?
編集:
これを回避すべく、コードをリファクタリングし、LabelCallback サブルーチンを変更して状態変数を設定し、リボンの別のボタンで実際に「何らかのアクションを実行する」ルーチンをトリガーするようにしました。私の意見では、これは洗練されていません。(不格好と言ってもいいでしょうか?) dropBox 項目が選択されたときにアクションを実行する方がはるかに理にかなっています。また、どの項目が選択されているかに関係なくイベントが起動すれば、見事に機能します。