ユーザーの選択に基づいてさまざまなデータセットを入力するリストボックスがあります。
リストボックスにある可能性のある特定の値を循環するにはどうすればよいですか?これはFor Each
ステートメント、または何?
For
ループを実行してリストボックスの各行を調べ、選択した行でwhateverを実行できます。この例では、lstLocationsリストボックスで選択したアイテムの2番目の列を表示します。 (列番号はゼロから始まります。)
Private Sub cmdShowSelections_Click()
Dim lngRow As Long
Dim strMsg As String
With Me.lstLocations
For lngRow = 0 To .ListCount - 1
If .Selected(lngRow) Then
strMsg = strMsg & ", " & .Column(1, lngRow)
End If
Next lngRow
End With
' strip off leading comma and space
If Len(strMsg) > 2 Then
strMsg = Mid(strMsg, 3)
End If
MsgBox strMsg
End Sub
リストボックスから選択したアイテムが必要だと想定していることに注意してください。選択されているかどうかに関係なく、allアイテムが必要な場合は、.ItemData
を@DavidRelihan 推奨 として使用できます。ただし、その場合は、代わりにリストボックス.RowSource
から取得できます。
ListBoxを反復処理する方法は次のとおりです。
Dim i as Integer
For i = 0 to Me.ListBoxName.ListCount -1
'Access each item with
'Me.ListBoxName.ItemData(i)
Next i
Accessでリストボックスを操作する場合は、リストボックスレコードセットをキャプチャしてループするのが好きです。おそらく、DAOレコードセットオブジェクトの操作が簡単だと思ったからでしょう。
私は次のようなことをします:
Dim Rst as DAO.Recordset
Set Rst = lbxYourListboxObj.Recordset
'test to assure that there are records
If Rst.EOF then
'some error handling
end if
'I'm just paranoid so I always do this
Rst.MoveFirst
'iterate through list
Do Until Rst.EOF
'do something for each record
'it is Nice and convenient to be able to reference the field names directly too!
debug.print Rst!Field1.name,Rst!Field1.value
Loop