wake-up-neo.com

durchlaufen von Werten in einem MS Access-Listenfeld

Ich habe ein Listenfeld, in dem je nach Benutzerauswahl unterschiedliche Datensätze angezeigt werden.

Wie kann ich durch bestimmte Werte im Listenfeld blättern? Ist das eine For Each Anweisung, oder was?

11
Justin

Sie können eine For-Schleife ausführen, um jede Zeile in der Listbox zu untersuchen, und mit den ausgewählten Zeilen was auch immer ausführen. In diesem Beispiel zeige ich die zweite Spalte der ausgewählten Elemente im Listenfeld lstLocations an. (Die Spaltennummerierung beginnt mit Null.)

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

Hinweis: Ich habe angenommen, Sie möchten die ausgewählten Elemente aus dem Listenfeld. Wenn Sie alle Elemente auswählen möchten oder nicht, können Sie .ItemData als @DavidRelihan vorgeschlagen verwenden. In diesem Fall können Sie sie jedoch stattdessen aus dem Listenfeld .RowSource abrufen.

16
HansUp

So durchlaufen Sie die ListBox:

Dim i as Integer

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

Wenn ich mit einer Listbox in Access arbeite, möchte ich das Recordset der Listbox erfassen und durchlaufen. Vielleicht, weil ich finde, dass DAO-Recordset-Objekte einfach zu bearbeiten sind.

Ich würde etwas machen wie:

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