web-dev-qa-db-fra.com

parcourir les valeurs dans une zone de liste MS Access

J'ai une zone de liste qui remplit avec différents ensembles de données en fonction des sélections de l'utilisateur.

Comment puis-je parcourir les valeurs données pouvant figurer dans la zone de liste? Est-ce une déclaration For Each ou quoi?

11
Justin

Vous pouvez effectuer une boucle For pour examiner chaque ligne de la liste et faire que ce soit avec les lignes sélectionnées. Dans cet exemple, j'affiche la deuxième colonne des éléments sélectionnés dans la liste déroulante lstLocations . (La numérotation des colonnes commence par zéro.)

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

Remarque: j'ai supposé que vous vouliez les éléments sélectionnés dans la liste. Si vous voulez tous éléments, sélectionnés ou non, vous pouvez utiliser .ItemData comme @DavidRelihan suggéré . Cependant, dans ce cas, vous pouvez les obtenir à partir de la listbox .RowSource.

16
HansUp

Voici comment vous parcourez le ListBox:

Dim i as Integer

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

Si vous utilisez une liste de sélection dans Access, je voudrais capturer le jeu d'enregistrements de la liste de sélection et la parcourir en boucle. Peut-être parce que je trouve les objets de jeu d'enregistrements DAO faciles à utiliser.

Je ferais quelque chose comme:

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