Код VBA не даст точных результатов множественного выбора ListBox - PullRequest
0 голосов
/ 11 апреля 2019

Я дал гигантскую связанную таблицу Excel в Access с кучей старых исторических данных. Я создал множественный выбор ListBox в форме, которая позволяет пользователю выбирать несколько «кварталов года» для отображения этих данных выбранного квартала из исторических данных.

Моя проблема в том, что написанный мной код VBA неправильно фильтрует результаты. Например, я выберу Квартал 1 и Квартал 2 из списка, запустлю кнопку запроса, и она все равно даст мне нефильтрованные результаты, она просто отображает все данные за квартал 1, 2, 3 и 4. Она отображает все правильная информация, она просто не будет фильтровать критерии, указанные в списке.

Вот мой код:

Private Sub Command2_Click()

DoCmd.RunSQL ("Delete * from quarters")

For x = 0 To Me.List0.ListCount - 1
    If Me.List0.Selected(x) > 0 Then
        DoCmd.RunSQL ("Insert into quarters values ('" & _
            Me.List0.ItemData(x) & "')")
    End If
Next

DoCmd.OpenQuery "Quarter"

End Sub

Я просто хотел бы знать, как заставить его фильтровать правильные результаты. Спасибо.

1 Ответ

1 голос
/ 11 апреля 2019

Ваш пример кода содержит здесь логическую ошибку ...

If Me.List0.Selected(x) > 0 Then
    DoCmd.RunSQL "Insert ..."
End If

Проблема в том, что когда x является индексом строки для одного из выбранных элементов списка, Me.List0.Selected(x) возвращает True, чтоэто -1.А поскольку -1 не больше нуля, условие If ... Then оценивается как False, поэтому строка не вставляется.

Изучите эту таблицу "четверти".Он должен быть пустым, потому что вы удалили все его строки в начале процедуры и не добавили никаких строк после.

Измените эту строку на эту ...

If Me.List0.Selected(x) = True Then

Затем снова запустите код.Если запрос «Квартал» по-прежнему не открывается фильтрованным, как вы ожидаете, добавьте SQL-запрос в свой вопрос и опишите, чем результат запроса отличается от того, что вы хотите.

...