打开窗体或报表时应用筛选器

使用 Visual Basic for Applications (VBA) 代码打开窗体或报表时,可能需要指定要显示的记录。 可以通过几种方法指定要在窗体或报表中显示的记录。 一种常用方法是显示一个自定义对话框,用户可以在其中输入窗体或报表的基础查询的条件。 要获取该条件,应引用对话框中的控件。 以下各节说明了可以使用在自定义对话框中输入的条件来筛选记录的三种方法。

使用 wherecondition 参数

在用户仅提供一个值的情况下,OpenFormOpenReport 方法或操作的 wherecondition 参数是获取条件的最简单方法。 例如,您可以显示一个窗体,提示用户为要打印的发票选择订单 ID。 如果您使用的是事件过程,则可以通过向 OpenReport 方法添加一个参数来应用仅显示一个记录的筛选,如下面的代码行所示:

DoCmd.OpenReport "Invoice", acViewPreview, , "OrderID = " & OrderID 

"OrderID = "筛选器表达式中的 引用发票报表基础查询中的 OrderID 字段。 表达式右侧的 OrderID 是指用户从对话框中的 OrderID 列表中选择的值。 该表达式将两者连接在一起,导致报表仅包括用户选择的记录的发票。

wherecondition 参数仅由为运行 OpenFormOpenReport 方法的按钮的 OnClick 事件指定的事件过程来应用。 这样,您便可以灵活地使用任意数量的不同对话框来打开同一窗体或报表,并根据用户的目的应用不同的条件集。 例如,用户可能想要为特定客户打印发票或者仅查看特定产品的订单。

使用 wherecondition 参数为多个字段设置条件,但如果这样做,参数设置很快就会变得漫长而复杂。 在这些情况下,在查询中指定条件可能更容易。

将查询用作筛选器

一个单独的查询(有时称为筛选查询)可以引用对话框中的控件以获取其条件。 使用该方法时,将 OpenFormOpenReport 方法或操作的 filtername 参数设置为您创建的筛选查询的名词,从而筛选窗体或报表中的记录。 该筛选查询必须包括您要打开的窗体或报表的记录源中的所有表。 此外,该筛选查询必须包括您要打开的窗体或报表中的所有字段,或者您必须将它的 OutputAllFields 属性设置为 Yes

创建并保存用作筛选器的查询之后,将 OpenReport 方法或操作的 filtername 参数设置为该筛选查询的名称。 每次运行 OpenReport 方法时,filtername 参数都将应用指定的筛选查询。

使用查询作为筛选器来设置条件与使用 OpenFormOpenReport 方法的 wherecondition 参数具有相似的优点。 筛选查询同样使您可以灵活地使用多个对话框来打开同一窗体或报表,并根据用户的目的应用不同的条件集。

直接引用窗体或报表的基础查询中的对话框控件

您还可以在窗体或报表的基础查询中直接引用对话框控件,而不必使用 OpenFormOpenReport 方法的参数。 使用该方法时,OpenFormOpenReport 方法或操作不需要 whereconditionfiltername 参数。 每次打开窗体或报表时,其基础查询都会查找对话框以获取其条件。 但是,如果用户在“数据库”窗口中打开窗体或报表,而不是通过您的对话框打开窗体或报表,则 Access 会显示一个参数框,提示用户输入对话框值。

支持和反馈

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