【问题标题】:Open Access Form with Filter VBA带有过滤器 VBA 的开放式访问表单
【发布时间】:2015-05-20 08:30:59
【问题描述】:

我无法使用过滤器打开表单。我试图运行的代码是这样的:

DoCmd.OpenForm "MyForm", , "[ID] = " & Me.MyListBox.Column(0), , acFormEdit, acDialog

当我运行这一行时,它会打开表单,但不应用过滤器。

FilterOnLoad 属性设置为 True,我已在 On Load 事件中验证它为 true。

在 Form_Load 事件中,Me.FilterOn = False 和 Me.Filter = ""。

过滤器怎么了?我究竟做错了什么?我尝试通过 VBA 将 Me.FilterOn 属性设置为 True,然后保存表单,但是当我再次打开表单时,它被重置为 False。

如果我使用 VBA 将过滤器放入,然后将 Me.FilterOn 属性设置为 True,则表单会正确过滤。我已验证“Me.MyListBox.Column(0)”的值是否正确

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    以下是 DoCmd.OpenForm 方法 帮助主题对 FilterName 参数的说明:

    一个字符串表达式,它是当前查询的有效名称 数据库。

    但是你没有给它一个查询的名字。我认为您实际上想要 WhereCondition 参数:

    DoCmd.OpenForm FormName:="MyForm", _
        WhereCondition:="[ID] = " & Me.MyListBox.Column(0), _
        DataMode:=acFormEdit, _
        WindowMode:=acDialog
    

    【讨论】:

    • 谢谢!我在文档中看到了这一点,但是当我将过滤器设置为等于我尝试使用 openform 传递的相同字符串时,它起作用了,所以我想也许我需要做一些其他事情才能让它工作。这是漫长的一天......
    • 是的,我进行了进一步调查,我认为这种情况具有误导性。当您为 OpenForm 提供与已保存查询的名称不匹配的 FilterName 字符串值时,Access 不会抱怨 --- 它只是继续打开表单,就像您打开首先没有提供 FilterName。在我看来,它应该提醒您它找不到查询。但我真的从不使用 FilterName; WhereCondition 是要走的路。 ;-)
    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多