【问题标题】:Microsoft Access - Filtering a form based on check boxes for one fieldMicrosoft Access - 根据一个字段的复选框过滤表单
【发布时间】:2022-02-24 01:48:58
【问题描述】:

我有一个表格,其中列出了农民和他们拥有的所有牲畜(如果农民有多种牲畜,则将它们列在单独的记录中)。我想要做的是允许用户过滤表单,以便他们只能看到拥有某些类型牲畜的农民,具体取决于他们检查/突出显示的内容。我希望他们能够选择多种牲畜(我想出了如何过滤一种牲畜,但仅此而已)用户单击一个按钮来运行过滤器。我知道这可以做到,但我不知道怎么做。我一直在寻找答案,但运气不佳。

这是一个例子:

鲍勃有马

鲍勃有牛肉

莎莉有马

莎莉有山羊

如果用户点击“Beef Cows”,然后点击“Filter”按钮,则只会显示 Bob 的信息。如果用户点击“Horses”和“Beef Cows”,Bob 和 Sally 都会出现。

更新: 我让这种方式比它需要的更复杂。请参阅下文了解适合我的解决方案。

【问题讨论】:

  • 那么数据真的是“牲畜A”还是“猪”?编辑问题以将示例数据显示为文本表。这将需要 VBA 代码来构建过滤条件并应用于表单或报告。一种常见的方法是使用多选列表框并循环通过列表框选择来构建一个字符串数组以用于 IN() 子句:SELECT * FROM table WHERE Livestock IN('A', 'C')。使用复选框将需要多个 If Then 块来构建字符串。 Listbox 是更紧凑的代码。
  • 这能回答你的问题吗? ListBox Multiselect in MS Access
  • 最好用牲畜 ID SELECT * FROM table WHERE LivestockID IN (1,3) 构建字符串。替代标准是使用 OR 运算符 SELECT * FROM table WHERE LivestockID = 1 OR LivestockID = 3 的多个相等表达式。
  • 列表框在设计上也提供了更多的多功能性。如果添加新的牲畜(鸵鸟?)不必重新设计表单以添加另一个复选框,它只是基于 Livestock 表的列表框中的另一个项目。
  • 更多关于构建过滤条件allenbrowne.com/ser-62.html

标签: forms ms-access checkbox filter


【解决方案1】:

我最终做的是使用以下 VBA 代码创建一个按钮:

Private Sub cmdFilterButtonTake2_Click()
DoCmd.GoToControl "LivestockType"
DoCmd.RunCommand acCmdFilterMenu
End Sub

“LivestockType”是我想要排序的字段。它就像一个魅力!

我还创建了一个按钮来清除过滤器

Private Sub cmdRemoveFilter_Click()
Me.Filter = ""
Me.FilterOn = False
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 2016-07-20
    • 2022-01-01
    相关资源
    最近更新 更多