циклическое переключение значений в окне списка MS Access - PullRequest
11 голосов
/ 29 мая 2010

У меня есть список, который заполняется различными наборами данных в зависимости от выбора пользователя.

Как я могу перебрать все заданные значения, которые могут быть в списке? Это For Each утверждение или как?

Ответы [ 3 ]

23 голосов
/ 29 мая 2010

Вот как вы перебираете ListBox:

Dim i as Integer

For i = 0 to Me.ListBoxName.ListCount -1
   'Access each item with 
   'Me.ListBoxName.ItemData(i)
Next i
17 голосов
/ 29 мая 2010

Вы можете сделать цикл For для проверки каждой строки в списке и выполнить независимо с выбранными строками. В этом примере я отображаю второй столбец из выбранных элементов в списке lstLocations . (Нумерация столбцов начинается с нуля.)

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

Примечание. Предполагается, что вы хотите выбрать элементы из списка. Если вы хотите все элементов, выбранных или нет, вы можете использовать .ItemData в качестве @DavidRelihan предлагаемых . Однако в этом случае вы можете получить их из списка .RowSource.

0 голосов
/ 25 июля 2018

При работе со списком в 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
...