こんにちは、わたあめです。今日はExcelのVBAのユーザフォームのリストボックスについての記事です。セル範囲からリストボックスを作成して表示したところ、リストの項目すべてに枠線がついた状態で表示される事象に出会いました。

枠線がついていても処理に問題はないのですが、見た目ない方が個人的には綺麗な感じがするので、枠線を表示しない方法を考えていきます。それでは、いってみましょう!
事象詳細
事象の詳細です。
- ユーザフォームで作成したリストボックスの項目ひとつひとつが枠線に囲われてしまう
- リストは複数選択できるようになっている
- 枠線は一度選択して解除すると消える
- VBAのマクロ処理を妨げるものではない
処理上は問題ない物の、やはり見た目上気になるので今回は対策を練る事としました。
対処:他のパーツにフォーカスすれば枠線は消える
対処方法としては、他のボタンなどのリストボックスではない他パーツにフォーカスさせれば枠線は消えるようです。自身のリストボックス以外にフォーカスを持っていけば、リストボックスの枠線は解除されました。
フォーカスは、基本的には以下の構文を使います。
例えば、テキストボックスにフォーカス(入力できる状態)にするならば、「TextBox1.SetFocus」という書き方をします。作成しているユーザフォームの中に、他のパーツにフォーカスさせれば良いです。
今回はリストボックスの全解除ボタンを付けた
今回は、ボタンを新たに作成し、そこにフォーカスさせるようにしました。

「全解除」ボタンがCummandButton1だとして、リストボックスをShowした後にボタンにフォーカスするマクロを入れています。
ボタン側のマクロは、リストボックスのリストを選択した後、選択を全解除するというVBAが動くマクロを追加しています。全解除マクロサンプルは以下です。
Private Sub CommandButton1_Click()
'全解除
Dim i As Integer
With UserForm1.ListBox1
For i = 0 To .ListCount - 1
.Selected(i) = False
Next i
End With
End Sub
SetFocusでフォーカスできる・できないパーツがあるので注意
フォーカスできるパーツとできないパーツがあるので注意です。以下表にまとめました。
フォーカスできる | テキストボックス、コンボボックス、リストボックス(※)、チェックボックス、リストボックス、オプションボタン、トグルボタン、フレーム、タブ、スクロールバー、マルチページ、スピンボタン、RefEdit |
---|---|
フォーカスできない | ラベル、画像 |
ラベルと画像(イメージ)にはフォーカスが合わせられない、SetFocusメソッドが使えないので注意です。※またリストボックスはフォーカス可ですが、自分自身にフォーカスしてもひとつひとつの枠線は消えなかったです。
ちなみに、SetFocusに対応していない場合は、以下のエラーが出ました。
さいごに
いかがだったでしょうか。同じような事象に出会った方の参考になれば幸いです。それでは、また!