リストボックス(ListBoxコントロール)にデータを追加するには、AddItemメソッドを使います。次のコードは、コマンドボタン(CommandButton1)をクリックすると、テキストボックス(TextBox1)の文字列をリストボックス(ListBox1)に追加します。なお、ここでは下図のようなUserFormを例にします。上から、ListBox1、TextBox1、CommandButton1です。
Private Sub CommandButton1_Click() ListBox1.AddItem TextBox1.Text End Sub
では、この調子で次々とデータを登録していきましょう。"Sample2"から"Sample10"まで登録するのですが、1つずつ手入力するのは面倒くさいので次のようなコードで登録します。
Private Sub CommandButton1_Click() Dim i As Long For i = 2 To 10 TextBox1.Text = "Sample" & i ListBox1.AddItem TextBox1.Text Next i End Sub
最後に登録したのは"Sample10"ですが、これはリストボックスの高さを超えていますので見えません。そう、リストボックスは、新しいデータを登録しても、それだけでは自動的にスクロールしないんですね。それでもいいと。常に先頭が見えていればいいというのでしたら、ただAddItemするだけです。そうではなくて、一番下に追加した新しいデータが見えるよう、自動的にスクロールさせたいのでしたら、ListIndexプロパティを操作してやります。
Private Sub CommandButton1_Click() Dim i As Long For i = 1 To 11 TextBox1.Text = "Sample" & i ListBox1.AddItem TextBox1.Text ListBox1.ListIndex = ListBox1.ListCount - 1 Next i End Sub
上記のサンプル程度でしたら、コマンドボタンをクリックすると一瞬で終わってしまいますが、たとえば次のようなコードだと違いがわかりやすいです。
Private Sub CommandButton1_Click() Dim i As Long, buf As String buf = Dir("C:\Windows\") Do While buf <> "" ListBox1.AddItem buf ListBox1.ListIndex = ListBox1.ListCount - 1 DoEvents buf = Dir() Loop End Sub
リストボックスの表示を更新するために、DoEventsを入れています。
また、次のように、処理の結果などを追記する場合にも便利です。
Private Sub CommandButton1_Click() Static cnt As Long cnt = cnt + 1 ListBox1.AddItem "処理" & cnt ListBox1.ListIndex = ListBox1.ListCount - 1 End Sub