MS Access Выбор фильтра с ComboBox - PullRequest
0 голосов
/ 05 ноября 2018

Я вернулся с еще одним Вопросом, касающимся MS Access и его среды VBA.

В настоящее время я создаю базу данных в MS Access 2016. Основное представление headview имеет выпадающий список viewcombo и подчиненную форму listview.

Что мне нужно: я хочу, чтобы выпадающий список фильтровал представление списка в зависимости от выбранной записи.

Что я сделал:

Private Sub ViewCombo_AfterUpdate()
On Error GoTo Proc_Error

If IsNull(Me.ViewCombo) Then

   Me.ListView.Form.Filter = ""
   Me.ListView.Form.FilterOn = False

Else

    Dim selectedOption As AccessObject
    selectedOption = Me.ViewCombo
  Select Case selectedOption

   Case selectedOption = "open"
      Me.ListView.Form.Filter = "Column1='" & "'"

End Select

End If
Proc_Exit:
   Exit Sub
Proc_Error:
   MsgBox "Error " & Err.Number & " Setting Filter:" & vbCrLf & Err.Description
   Resume Proc_Exit
End Sub

Примечание: Me.ListView.form.Filter = "Column1='" & "'" должно быть пустым, если выбранная запись viewCombo равна open, доступные записи Open, Closed, ovedue, cancel and "as seleced

Однако, похоже, что Access не работает таким образом. Как правильно написать операторы выбора регистра?

Редактировать 1: Значения ComboBox ViewCombo записаны в нем вручную. В зависимости от выбора значения различные фильтры должны быть установлены на ListView
Пример: * * тысяча двадцать-шесть Выбранное значение open
Listview фильтруется с помощью заявления: Column1 is empty

Выбранное значение closed
Представление Listview фильтруется с помощью выражения Column 1 is not empty, Column 2 contains the value 10 (10 - это идентификатор статуса, эти данные мне дают сотрудники, с которыми я работаю, они являются внутренними и не имеют значения для базы данных)

Надеюсь, это поможет прояснить ситуацию.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Я решил это с помощью входных данных, которые вы, ребята, дали мне:

Private Sub AuswahlFilter_AfterUpdate()
On Error GoTo Proc_Error

If Me.ViewCombo.Value = "All" Then
   Me.ListView.Form.Filter = ""
   Me.ListView.Form.FilterOn = False

Else
Select Case Me.ViewCombo.Value
    Case Is = "Open"
    Me.ListView.Form.Filter = "FlagOpenClosed='1'"
    Me.ListView.Form.FilterOn = True
End Select

End If
Proc_Exit:
   Exit Sub
Proc_Error:
   MsgBox "Error " & Err.Number & " when creating Filter:" & vbCrLf & Err.Description
   Resume Proc_Exit
End Sub

Я создал несколько дополнительных столбцов в ListView. Таблица listview основана на дополнительных столбцах, заполненных значениями из операторов типа When(IsNull(Column1);1;0). Затем я установил фильтр для этих значений.

Полагаю, есть лучший способ сделать это, однако я новичок в VBA, так что это лучшее решение, которое я придумал. Если есть лучший способ сделать это, пожалуйста, не стесняйтесь, напишите здесь в качестве ответа, я рад узнать что-то новое, и я рад услышать от вас, ребята.

-Ninsa

0 голосов
/ 05 ноября 2018

Вы будете использовать значение поля со списком, а не поле со списком, как объект, аналогично:

If IsNull(Me.ViewCombo.Value) Then

    Me.ListView.Form.Filter = ""
    Me.ListView.Form.FilterOn = False

Else

    Select Case Me.ViewCombo.Value
        Case Is "open"
            Me.ListView.Form.Filter = "[SomeFieldName] = 'open'"   ' or other filter value.

    End Select
    Me.ListView.Form.FilterOn = True

End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...