Search code examples
ms-accessvbams-access-2016

MS Access Choosing Filter with ComboBox


I have returned with yet another Question regarding MS Access and its VBA environment.

I'm currently constructing a database in MS Access 2016. The main View headview has a combobox viewcombo and a subform listview.

What I need: I want the combobox to filter the listview depending on the chosen entry of it.

What I did:

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

Note: The Me.ListView.form.Filter = "Column1='" & "'" is supposed to be empty if the chosen entry of viewCombo is open, the available entries are Open, Closed, ovedue, cancel and "as seleced

However, it seems that Access doesnt work this way. How do I properly write the select case statements?

Edit 1: The Values of the ComboBox ViewCombo are manualy written in it. Depending on the selection of a value, different Filters are to be set on the ListView
Example:
The selected value is open
The Listview is filtered with the statement: Column1 is empty

The selected value is closed
The Listview is filtered with the statement Column 1 is not empty, Column 2 contains the value 10 (10 is an ID for a status, these are given to me by the employees I work with, those are internal and have no meaning for the database)

Hope that helps to clarify the situation.


Solution

  • You will use the value of the combobox, not the combobox as an object, similar to:

    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