Form.Filter 事件 (Access)

当用户通过选择“按窗体筛选”、“高级筛选/排序”或“按窗体服务器筛选”打开筛选器窗口时发生。

语法

表达式Filter (CancelFilterType)

expression:表示 Form 对象的变量。

参数

名称 必需/可选 数据类型 说明
Cancel 必需 Integer 该设置确定是否打开筛选窗口。 将 Cancel 参数设置为 True (1) 会阻止打开筛选器窗口。 您还可以使用 CancelEventDoCmd 对象的方法可取消打开筛选窗口。
FilterType 必需 Integer 用户尝试打开的筛选窗口。 FilterType 参数可以是以下内部常量之一:
  • acFilterByForm
  • acFilterAdvanced
  • acServerFilterByForm

备注

若要此事件发生时运行宏或事件过程,请将 OnFilter 属性设为宏的名称或 [事件过程]

使用 Filter 事件可以:

  • 删除所有以前筛选的窗体。 若要执行此操作,将窗体的 FilterServerFilter 属性设置为零长度字符串 ("") 在 Filter 宏或事件过程。 如果要确保无关的条件不会在新筛选器中显示,这尤其有用。 例如,使用 “按选定内容筛选” 功能时, (窗体) 所选文本中使用的条件将添加到 FilterServerFilter 属性 WHERE 子句表达式中,并出现在“ 按窗体筛选 ”窗口和“ 高级筛选/排序 ”窗口或“ 按窗体服务器筛选 ”窗口中。 通过使用 筛选器 事件,您可以删除这些旧标准。

  • 输入新筛选器的默认设置。 若要执行此操作,设置 FilterServerFilter 属性,以包括这些条件。 例如,您可能希望“产品”窗体的所有筛选器仅显示当前产品 (“产品”窗体中未选择“已停用”控件的产品) 。

  • 使用您自己的自定义筛选器窗口而不是一个 Microsoft Access 筛选器窗口。 筛选器 事件发生时,可以打开自定义窗体,并在此窗体上使用的项,以设置 FilterServerFilter 属性和筛选器的原始表单。 当用户关闭此自定义窗体时,将原始窗体的 FilterOnServerFilterByForm 属性设置为 True (1) 以应用筛选器。 取消 Filter 事件会阻止“访问筛选器”窗口打开。

  • 防止窗体上的某些控件在“按窗体筛选”“按窗体服务器筛选”窗口中显示或使用。 如果在 Filter 事件过程或宏中隐藏或禁用控件,则会在“ 按窗体筛选 ”或“按窗体筛选 服务器” 窗口中隐藏或禁用该控件,并且不能用于设置筛选条件。 然后,可以使用 ApplyFilter 事件来显示或启用该控件在应用筛选器之后,或者当从窗体中删除筛选器。

示例

以下示例演示如何在用户尝试创建筛选器时禁用 Orders 窗体上的 TotalDue 控件,以便用户无法对此字段进行筛选。 具有 TotalDue 值且满足其他筛选条件的任何记录将始终显示在筛选的窗体上。 此示例还强制用户使用“按窗体筛选”窗口而不是“高级筛选/排序”窗口。

若要尝试此示例,请将以下事件过程添加到包含 TotalDue 控件的 Orders 窗体。 尝试使用使用 TotalDue 控件的“高级筛选/排序”窗口创建筛选器。 此外,也请尝试通过使用“按窗体筛选”窗口来创建相同的筛选器。

Private Sub Form_Filter(Cancel As Integer, FilterType As Integer) 
    If FilterType = acFilterByForm Then 
        Forms!Orders!TotalDue.Enabled = False 
    ElseIf FilterType = acFilterAdvanced Then 
        MsgBox "The best way to filter this form is to use the " _ 
            & "Filter By Form command or toolbar button.", vbOKOnly + vbInformation 
        Cancel = True 
    End If 
End Sub

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。