【发布时间】:2011-09-30 15:45:47
【问题描述】:
我正在使用 VBA 动态加载报告的内容,根据从我构建的控制面板表单中选择的报告,报告的查询可能会被过滤。
在我的 Report_Open 函数的开头,我有这个:
Private Sub Report_Open(Cancel As Integer)
Me.Filter = "VIP=True"
Me.FilterOnLoad = True
现在,当我开始这个项目时,这是可行的——我已经注释掉了这些行,当取消注释时发现这不再正常工作了。而不是在加载报表时应用过滤器,我必须重新加载报表以使过滤器工作 - 通过切换到打印预览并切换回报表视图,或者切换到设计视图然后返回报表视图(在设计视图中,选定的过滤器会显示在属性窗格中)。
我正在使用允许用户查看、导出为 PDF 或打印(在打印预览中打开)的命令按钮加载报告。这些命令都不会导致在应用过滤器的情况下打开报告 - 它必须重新加载。
我用来加载报告的命令如下供参考:
If (Action = "View") Then
DoCmd.OpenReport "Test", acViewReport
ElseIf (Action = "PDF") Then
DoCmd.OutputTo acOutputReport, "Test", acFormatPDF
ElseIf (Action = "Print") Then
DoCmd.OpenReport "Test", acViewPreview
End If
好的,我不知道为什么 Me.Filter 和 Me.FilterOnLoad 不 工作,因为从我在 MSDN 和其他地方看到的所有内容来看,它应该工作。话虽如此,我发现我可以改用DoCmd.ApplyFilter:
'Check if VIP - add filter if necessary
If (getGlobal(1) = True) Then
DoCmd.ApplyFilter , "VIP = True"
End If
如果有人有任何想法,我仍然想知道为什么其他方式的行为如此奇怪......
【问题讨论】:
-
或者,由于您是在 OnOpen 事件中执行此操作,因此您可以使用完整的 WHERE 子句设置 Recordsource。我永远不会以您概述的方式使用过滤器——如果我在 OnOpen 事件中编写代码,我将使用 Recordsource 而不是过滤器属性。
标签: ms-access filter vba ms-access-2007