web-dev-qa-db-ja.com

MSAccessリストボックスの値を循環する

ユーザーの選択に基づいてさまざまなデータセットを入力するリストボックスがあります。

リストボックスにある可能性のある特定の値を循環するにはどうすればよいですか?これはFor Eachステートメント、または何?

11
Justin

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から取得できます。

19
HansUp

ListBoxを反復処理する方法は次のとおりです。

Dim i as Integer

For i = 0 to Me.ListBoxName.ListCount -1
   'Access each item with 
   'Me.ListBoxName.ItemData(i)
Next i
24

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
2
Marco Pérez