当我手动添加另一个过滤器时,来自 VBA 的过滤器出错 (Access 2016)

Filter from VBA gets error when I add another filter manually (Access 2016)

获得了一个包含大量表格的数据库。其中之一是我的 "starting page",它有几个按钮,每个按钮打开一个表单。我有很多年的条目,因此,为了使其更具功能性,我在起始页上有一个组合框,其中包含所有年份,我在所有按钮的代码中使用它们的值,以便在它们打开时过滤表单。代码如下所示:

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 包含一份报告。现在,我在报告的打开事件中有类似的代码:

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

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

问题:当我尝试在 "Name" 上应用辅助过滤器时,例如使用 RightClick->equals"Name" 它会刷新报告但不会应用它。 我尝试将报告中的事件从打开时更改为加载时。然后第二个过滤器正确应用,但是当我点击任何地方时,我得到 运行-time error '5': Invalid procedure call or argument。调试指示行

MeFilterOn = True

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

如有任何建议,我们将不胜感激。请注意,我正在学习 Access 和 VBA 我自己,我对它非常陌生。提前致谢

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

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 属性。

对表单使用相同的方法。