在表单/报表上应用多个过滤器

时间:2014-02-22 09:03:22

标签: access-vba ms-access-2010

我希望能够允许用户在表单/报表上应用多个过滤器。让我进一步解释。 我有一个子表单(嵌入在表单中),它已经由我创建的选项框过滤。我想添加另一个选项框..是否可能。 为了简化我的要求,让我进一步解释。在我的子表单中,您可以按我的记录状态(即打开,关闭,待处理等)进行筛选。我想添加另一个选项框,其中包含记录的优先级(低,中,高,等)。 。
我认为我的解释很清楚。 任何关于如何这样做的建议将不胜感激。 谢谢, 甲

2 个答案:

答案 0 :(得分:3)

这只是您在VBA中使用连接进行的单个过滤器。我的标准代码看起来像这样。请注意,我为Description字段添加了一个过滤器,您没有提到过,只是这样您就可以看到如何使用LIKE * something *进行过滤,有时也称为模糊搜索。如果您不需要,可以删除该代码。

Private Sub cboStatus_AfterUpdate()
    Call FilterSubform
End Sub

Private Sub cboPriority_AfterUpdate()
    Call FilterSubform
End Sub

Private Sub cboDescription_AfterUpdate()
    Call FilterSubform
End Sub


Private Sub FilterSubform() 
    Dim strWhere as String

    'Make string
    If Nz(Me.cboStatus, "") <> "" Then
        strWhere = strWhere & "[Status] = '" & Me.cboStatus & "' AND "
    End If

    If Nz(Me.cboPriority, "") <> "" Then
        strWhere = strWhere & "[Priority] = '" & Me.cboPriority & "' AND "
    End If

    If Nz(Me.cboDescription, "") <> "" Then
        strWhere = strWhere & "[Description] LIKE '*" & Replace(Me.cboDescription, "'", "''") & "*' AND "
    End If

    'Apply filter
    If strWhere <> "" Then
        strWhere = Left(strWhere, Len(strWhere)-5) 'Remove the extra AND
        Me.subForm.Form.Filter = strWhere
        Me.subForm.Form.FilterOn = True
    Else
        Me.subForm.Form.Filter = ""
        Me.subForm.Form.FilterOn = False
    End If
End Sub

答案 1 :(得分:0)

如果您的记录源是查询,那么您可以将查询中的字段条件设置为窗体或子窗体中的控件。然后在做出选择之后,您可以使用&#34; After Update&#34;事件。

Me.Requery

通过这样做,您可以根据需要选择过多的记录。