即効テクニック |
UserFormに配置したリストボックス(ListBox)にデータを登録するにはAddItemメソッドを使います。 次のコードは、リストボックスに1000個のデータを登録します。
Private Sub CommandButton1_Click() Dim i As Long For i = 1 To 1000 ListBox1.AddItem "Sample" & i Next i End SubVBAはとても高速ですから、1000回のAddItemメソッドくらいならおそらく一瞬で終了してしまいます。 しかし、間違いなく1000個のデータが登録されているかどうかを確認するには、リストボックスのスクロールバーを下までドラッグしなければなりません。 1000個のデータを登録しても、リストボックスには最上部のデータが表示されているからです。 AddItemメソッドで追加した最新(最下行)のデータを、常に表示するにはどうしたらいいでしょう。 それには、ListIndexプロパティを設定します。 次のコードで、実行結果をご確認ください。Private Sub CommandButton1_Click() Dim i As Long For i = 1 To 1000 ListBox1.AddItem "Sample" & i ListBox1.ListIndex = ListBox1.ListCount - 1 DoEvents Next i End Sub画面を更新させるために、DoEventsも入れてあります。 では、リストボックスではなくテキストボックスではどうでしょう。 テキストボックス(TextBox)のMultiLineプロパティをTrueにして次のコードを実行してください。Private Sub CommandButton1_Click() Dim i As Long TextBox1.SetFocus For i = 1 To 1000 TextBox1.Text = TextBox1.Text & "Sample" & i & vbCrLf DoEvents Next i End Subテキストボックスに複数行の文字列を代入すると、カーソルは最終位置に移動されます。 リストボックスのように苦労しなくても、常に最終行が表示されているわけです。 では逆に、テキストボックスに複数行を代入しても、先頭行を表示するにはどうしたらいいでしょう。 単純にカーソルを、テキストボックス内の先頭に移動するだけなら、次のようにSelStartプロパティを操作すればいいです。Private Sub CommandButton1_Click() Dim i As Long TextBox1.SetFocus For i = 1 To 1000 TextBox1.Text = TextBox1.Text & "Sample" & i & vbCrLf DoEvents Next i TextBox1.SelStart = 0 End Subしかし「○行目にカーソルを移動したい」というときには、SelStartプロパティではなくCurLineプロパティが便利です。 次のコードは、カーソルを100行目に移動します。Private Sub CommandButton1_Click() Dim i As Long TextBox1.SetFocus For i = 1 To 1000 TextBox1.Text = TextBox1.Text & "Sample" & i & vbCrLf DoEvents Next i TextBox1.CurLine = 99 End Sub