ユーザーフォームのリストボックスについて、項目の選択を全解除する
本日試しにやってみたことを、忘れないうちにメモ。
ユーザーフォーム上のリストボックスについて、項目の選択を全解除したい。
↓こんな感じだ。
今までコマンドボタンのクリックイベントには、こんなコードを書いていた。
Private Sub CommandButton1_Click() Dim i As Long For i = 0 To ListBox1.ListCount - 1 ListBox1.Selected(i) = False Next End Sub
リストボックスの項目は、0番目から数え始める。従って最後は、
「リストの項目数-1」番目
となる。順次i番目の選択状態(Selected)をFalseにすることで、リストの全項目が非選択状態となる。
ところで、リストボックスのリストは、三つの方法でセットできる。
ListBox1.AddItem "りんご" ListBox1.AddItem "みかん" ListBox1.AddItem "ばなな"
のように、一つずつ追加するのが一つ目。
ListBox1.List = Array("りんご", "みかん", "ばなな")
のように、配列で一気にセットするのが二つ目。
のように、リストの項目が記載されたセルをRowsorceで指定するのが三つ目だ。(普段、私は殆ど使わない)。
四つ目以降の方法もあるかも知れないが、私が知る限りでは上記の三つだ。
この二つ目を見ていて、ふと思った。リストに配列を充てられるのなら、リストは配列として取り出せるのではないか。
そこで、全解除ボタンのコードを、こんな風に変更してみた。
Private Sub CommandButton1_Click() Dim seq As Variant With ListBox1 seq = .List ' リストを一旦、配列に退避させる .Clear ' リストボックスをクリア .List = seq ' リストに配列を充てる End With End Sub
結果、意図したとおりの動きとなった。早速「手数の一つ」に加えるとしよう。
ただし試してみたところ、Rowsorceで設定したリストボックスの場合、上記方式は「予期せぬエラーの発生」のメッセージと共にエラー終了する。
万能な方式ではないので、注意が必要です。
参考まで。