4

我有一个 Microsoft Access 数据库。它有一个客户表和每个客户的输入日期。我还有一个包含所有客户及其信息的表格。

我想制作一个组合框(下拉框),其中包括一年中的几个月(一月、二月、三月、四月等)。当用户从组合框中选择四月时,只有在该月添加的记录才会显示在记录表中。

这可以做到吗?我一直在尝试这样做至少 3 天,但没有运气..

亲切的问候。

4

3 回答 3

7

本质上,您需要一个下拉字段来应用过滤器功能来按月过滤相应的记录。根据您是否使用子表单执行以下操作。

主窗体(无子窗体) - 使用 ApplyFilter

  1. 使用所有 12 个月的输入值列表选择或使用月份表中的数据(使用隐藏或未隐藏的月份编号)创建一个组合框。
  2. 使用命令 ApplyFilter 为 AfterUpdate 或 OnClick 按钮事件创建宏或 VBA 例程。

宏:ApplyFilter FilterName: (leave blank), Where Condition: ="=[Record Month Field]='" & Forms!MainForm!FilterMonthCombo & "'", Control Name: (leave blank)

VBA:DoCmd.ApplyFilter , "[Record Month Field]='" & Me.FilterMonthCombo & "'"

主窗体(带子窗体) - 使用 RecordSource

  1. 使用所有 12 个月的输入值列表选择或使用月份表中的数据(使用隐藏或未隐藏的月份编号)创建一个组合框。
  2. 为 AfterUpdate 或 OnClick 按钮事件创建 VBA 例程以动态过滤子窗体的 RecordSource:

VBA:Forms!MainForm!Subform.Form.RecordSource = "SELECT * FROM Records WHERE [Record Month Field]='" & Forms!MainForm!FilterMonthCombo & "'"

于 2014-06-01T19:29:34.723 回答
1

在我看来,在 MS Access 中做一件简单的事情。如果您对 VBA 感到满意,您可以在组合框的“更新后”事件上编写一个过程。这个过程应该简单地将 FROM 的 RecordSource 更新为

"SELECT * FROM [the table with the records you want to filter] WHERE [Field with month number] = " & ComboxboxField.Column(0)

将您的组合框设置为有两列,一列带有月份编号,另一列带有月份名称。格式化组合框时,选择隐藏第一列数据,将其大小设置为 0"

于 2014-10-10T16:59:12.670 回答
0

您需要执行几个步骤,首先进入组合框的属性并更改行源,以便在第一列中包含月份编号,在第二列中包含月份名称。您需要为此制作一张桌子。接下来,进入组合框的属性并将列数更改为 2。然后更改列宽,使第一列为 0。它应该看起来像这样 - 0"; 2"。现在组合框应该在下拉列表中列出月份名称,但是如果您以编程方式访问它,它将为您提供月份的编号。

这应该让你开始,从那里开始,这取决于你如何获取这些数据,你需要一个使用 Month() 将其分开的查询,或者如果你使用的是子表单,你需要一个带有月份的字段来链接关闭。

希望这会有所帮助,如果还为时不晚。

于 2014-02-18T03:00:44.937 回答