フォームを閉じるとき、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 件のコメント:
コメントを投稿