【问题标题】:Filter from VBA gets error when I add another filter manually (Access 2016)当我手动添加另一个过滤器时,来自 VBA 的过滤器会出错(Access 2016)
【发布时间】:2018-02-05 18:21:59
【问题描述】:

有一个包含一堆表格的数据库。其中之一是我的“起始页”,其中有几个按钮,每个按钮都打开一个表单。我有可能几年的条目,因此,为了使其更实用,我在起始页上有一个组合框,其中包含所有年份的值,我在所有按钮的代码中使用它们来过滤打开时的表单。代码如下:

Private Sub Edit_Sale_Contract_Click()

'Opens the selected form'
DoCmd.OpenForm "new Sale Form", , , , acFormEdit

'Applies the filter'
If Forms![Main Menu].Combo10 = "All" Then
    Forms![new Sale Form].FilterOn = False
Else
    Forms![new Sale Form].Filter = "[crop]=" & Chr(34) & Forms![Main Menu].Combo10 & Chr(34)
    Forms![new Sale Form].FilterOn = True
End If
End Sub

我还有几份报告。我想要做的是制作一个带有 Tab 控件的表单,每个 Tab 都有一个报告。目前,我的报告的 On Open 事件中有类似的代码:

Private Sub Report_Open(Cancel As Integer)
    If Forms![Main Menu].Combo10 = "All" Then
        Me.FilterOn = False
   Else
       Me.Filter = "[crop]=" & Chr(34) & Forms![Main Menu].Combo10 & Chr(34)
       Me.FilterOn = True
End If
End Sub

到目前为止,这工作正常。我用一个按钮(没有过滤器代码)打开表单,并且报告在选项卡中正确打开,已经过滤。

问题:当我尝试在“名称”上应用辅助过滤器时,例如使用 RightClick->equals“名称”它会刷新报告并且不应用它。 我尝试将报告中的事件从 On Open 更改为 On Load。然后第二个过滤器正确应用,但是当我单击任何地方时,我得到运行时错误'5':无效的过程调用或参数。调试指示行

MeFilterOn = True

关闭调试器,“Name”上的第二个过滤器被取消,“Crop”上的第一个过滤器仍然打开。

感谢任何建议。请注意,我自己正在学习 Access 和 VBA,而且我非常陌生。提前致谢

【问题讨论】:

    标签: ms-access vba ms-access-2016


    【解决方案1】:

    您当前的代码会覆盖任何设置的过滤器。 如果要组合过滤器,则需要将新过滤器附加到旧过滤器:

    Private Sub Report_Open(Cancel As Integer)
        If Forms![Main Menu].Combo10 = "All" Then
            'Do nothing, because else you would deactivate the custom filter
       Else
           If Me.Filter <> "" Then
               Me.Filter = Me.Filter & " AND [crop]=" & Chr(34) & Forms![Main Menu].Combo10 & Chr(34)
           Else
               Me.Filter = "[crop]=" & Chr(34) & Forms![Main Menu].Combo10 & Chr(34)
           End If
           Me.FilterOn = True
       End If
    End Sub
    

    请注意,Access 倾向于将过滤器与报表一起保存,尤其是在使用布局视图时。您需要确保在保存报告时清除Report.Filter 属性。

    对表单使用相同的方法。

    【讨论】:

    • 出现了一个小问题。当我在特定作物和“所有”作物之间切换时,它会保留以前的过滤器。我想是因为“什么都不做”这一行。有没有办法从作物中清除过滤器,但仍然可以手动添加其他过滤器?提前致谢。
    • 说实话,不是真的。您可以清除所有过滤器,也可以不清除任何过滤器,除非您想做一些更复杂的 VBA 技巧。
    • 还有一个问题..很抱歉给您发送垃圾邮件。我正在尝试创建一个解决方法,现在我在 dbl-click 上有一个事件以清除报告中的所有过滤器。我尝试了 'Me.Filter = ""` 和 `Me.FilterOn = False`。两者都清除了眼睛上的过滤器,但如果我关闭并重新打开报告,过滤器会重新出现。此外,每次使用“AND”时,“数据属性”选项卡上的过滤器都会变长,导致多次尝试后报告为空。
    • 那是因为我告诉过你:请注意,Access 倾向于将过滤器与报表一起保存,尤其是在使用布局视图时。您需要确保在保存报表时清除 Report.Filter 属性。您需要转到属性窗格,并手动清除过滤器
    • 手动每次?好吧,那会很麻烦。再次感谢您。
    猜你喜欢
    • 2019-09-20
    • 2022-11-03
    • 2022-01-14
    • 2020-11-12
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2017-11-22
    • 2023-03-22
    相关资源
    最近更新 更多