2010/10/31

access2010 リボンをVBAで操作する Invalidate InvalidateControl


リボンに配置してあるコントロールには、VBAから直接に参照することはできない。フォーム上に配置されたaccessコントロールのようにプロパティの参照や設定ができないということ。

リボンのコントロール要素には、on~、get~というコールバックを示す属性があるので、これらとIRibbonUIオブジェクトのInvalidate/InvalidateControlメソッドを使用することでリボンコントロールを制御する。
コールバック属性に示されるプロシージャは、該当のリボンコントロールがキャッシュされるときに実行され、プロシージャから渡される値がコントロールの属性値になる。
例えば、enabled属性にはgetEnabledコールバック属性があり、属性値が示すプロシージャによってenabled属性値を取得する。取得した値がfalseであれば使用不可の状態になる。

コールバックプロシージャはキャッシュ時のみ動作でVBAから直接に実行を指示できないから、キャッシュ値を無効にするメソッドInvalidate/InvalidateControlを実行しリボンにシグナルを送信。
 リボンは自動的に再キャッシュを開始し、コールバックプロシージャを実行させ属性値を取得する。このとき、属性値として取得される変数をVBAで制御すれば、リボンコントロールの制御をすることになる。

リボンコントロールの再キャッシュ動作はVBAと非同期に実行されるから、リボンの動作に左右されるようなクリティカルな使い方をしちゃだめ。コントロールがキャッシュされる順番などは保証されないから、リボンコントロール間でも同じことが言える。

0 件のコメント: