MS Access使用ComboBox选择过滤器

时间:2018-11-05 11:51:44

标签: vba ms-access access-vba ms-access-2016

我返回了另一个有关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似乎无法以这种方式工作。如何正确编写select case语句?

修改1: 组合框ViewCombo的值是手动编写的。根据选择的值,将在ListView上设置不同的过滤器
示例:
所选值为open
Listview使用以下语句过滤:Column1 is empty

所选值为closed
Listview是用语句Column 1 is not empty, Column 2 contains the value 10过滤的(10是状态的ID,这些ID是我与之共事的员工给我的,这些是内部员工,对数据库没有意义)

希望有助于弄清情况。

2 个答案:

答案 0 :(得分:2)

您将使用组合框而不是组合框的值作为对象,类似于:

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

答案 1 :(得分:0)

我用你们给我的输入解决了这个问题:

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