日頃からこの日記を見に来てくださっている方のほとんどは、「Excelフォーム」などは使わないだろうけれど、不可解な事象で悩まされ、解決(というより回避)を見つけたので、日記に書いておきます。
「自分ってすげー!」と思うことがあるとしたら、こういう時なのだな、とひとりごちてみたりしたひとときでした。
フォーム
Excel2003 UserForm を新規作成し、ListBox と、その他適当にTextやCommandButton などを配置する。ListBox 以外は単にフォーカスを移動させるために使うだけなので、なんでもいい。
今回は名前は変更せずに、デフォルトのままにしてある。

コード
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) MsgBox "Hi!" ListBox1.Clear ListBox1.ColumnCount = 3 ListBox1.ColumnWidths = "30pt;35pt;20pt" ListBox1.AddItem "AAA" End Sub
ここでは、ColumnWidths がポイントで、
Clear とか、ColumnCount とかは、まぁこういうふうに再描画したいんですよ、というイメージのために置いたもの。
現象
(1)実行して、ListBoxをダブルクリックします
(2)表示されたダイアログを閉じます
(3)TextやButtonなどをクリックしてみます。フォーカスは普通に移動可能です
(4)ListBoxに "AAA" が表示されているので、それをダブルクリックします
(5)表示されたダイアログを閉じます
(6)TextやButtonなどをクリックしてみます。フォーカス移動できません!!!無反応で、まるで固まってしまったかのように見えます!!
(7)一旦ListBox内をクリックすれば、TextやButtonなどにもフォーカス移動可能になります。
回避策
なんでこんなことが起こるのかが想像もつかないのですが、なんらかのステータスが内部でちゅうぶらりんになるような、そんなイメージなんでしょうかね(←全然内容がないよう)。ListBox処理から出てこられなくなっちゃう、みたいな。
今回問題となったのは、Listbox.ColumnWidths の再設定の部分なので、実は毎度設定しなおす必要もないので、フォーム生成時に移動することで、一件落着。
まぁ、毎回幅を設定するという下品なコードを書いていたことが発端ではあるので、お恥ずかしいところではあるのですが、なんとも解せない挙動ですね。他のバージョンではどうなのかしらん。
.