【问题标题】:MS Access Choosing Filter with ComboBoxMS Access 使用 ComboBox 选择过滤器
【发布时间】:2018-11-06 14:47:35
【问题描述】:

我返回了另一个关于 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

注意:如果viewCombo的选择条目是open,则Me.ListView.form.Filter = "Column1='" & "'"应该为空,可用的条目是Open, Closed, ovedue, cancel and "as seleced

但是,Access 似乎不能以这种方式工作。如何正确编写 select case 语句?

编辑 1: ComboBox ViewCombo 的值手动写入其中。根据选择的值,将在ListView上设置不同的过滤器
示例:
所选值为open
Listview 使用以下语句过滤:Column1 is empty

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

希望这有助于澄清情况。

【问题讨论】:

  • 您说组合框的可用条目是OpenClosedOvedueCancelAs selected。请准确描述您希望在 ListView 子表单中显示的关于每个可能条目的记录以及如何从技术上过滤掉它们(我们还不知道您的 ListView 子表单的数据源的字段名称和字段类型)。
  • @UnhandledException 我用一个例子编辑了这个问题,希望有助于澄清情况:D
  • @UnhandledException 我自己解决了谢谢你的问题,给了我正确的想法。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我用你们给我的输入解决了它:

    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 的菜鸟,所以这是我想出的最佳解决方案。如果有更好的方法,请不要犹豫,把它写在这里作为答案,我很高兴学习新东西,很高兴收到你们的来信。

    -忍者

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      • 2023-03-19
      • 2014-05-15
      相关资源
      最近更新 更多