フォームを閉じるとき、invalidatecontrolを実行。開く時では、リボンがキャッシュされていないことがあるからと普通に考えた。要はフォームを開いたときは初期化しておきたかっただけ。
で、どうなるかというと、
comboBoxのItemを選択もしくは同じ文字列を投入し、フォームを閉じる。この時、comboBoxの値の初期化が成功するのは目視できる。だけど、フォームを再び開いたときには最後に投入したItemが選択された状態に戻っている。
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onLoad"> <ribbon startFromScratch="false"> <tabs> <tab id="tab01" label="タブ01"> <group id="g01" label="グループ01"> <comboBox id="cb01" label="コンボボックス" getText="getText"> <item id="i01" label="item01" imageMso="Info" /> <item id="i02" label="item02" imageMso="HappyFace" /> <item id="i03" label="item03" imageMso="PanningHand" /> </comboBox> </group> </tab> </tabs> </ribbon> </customUI>
Option Compare Database Option Explicit Private rbn As IRibbonUI Sub onLoad(ribbon As IRibbonUI) Set rbn = ribbon End Sub Sub getText(ctr As IRibbonControl, rtn) rtn = "(未選択)" End Sub Sub Invalidate_cb01() rbn.InvalidateControl "cb01" End Sub
Option Compare Database Option Explicit Private Sub Form_Close() Module1.Invalidate_cb01 End Sub
で、現時点での対策その1。但し、該当comboBoxが配置されているタブがアクティブになること
Option Compare Database Option Explicit Private rbn As IRibbonUI Sub onLoad(ribbon As IRibbonUI) Set rbn = ribbon End Sub Sub getText(ctr As IRibbonControl, rtn) rtn = "(未選択)" DoEvents End Sub Sub Invalidate_cb01() rbn.InvalidateControl "cb01" End Sub
Option Compare Database Option Explicit Private Sub Form_Load() On Error Resume Next '初回のエラーだけ処理したい Module1.Invalidate_cb01 End Sub
対策その2。初期化なんて考えない。
0 件のコメント:
コメントを投稿