当我手动添加另一个过滤器时,来自 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
属性。
对表单使用相同的方法。
获得了一个包含大量表格的数据库。其中之一是我的 "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
属性。
对表单使用相同的方法。