【问题标题】:Access 2007 VBA - Report filter doesn't work until report is reloadedAccess 2007 VBA - 报表过滤器在重新加载报表之前不起作用
【发布时间】: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.FilterMe.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


【解决方案1】:

正如@David-W-Fenton 建议的那样,将 WhereCondition 与 OpenReport 一起使用,而不是设置 Filter 表达式。您的 WhereCondition 可以是您用于过滤器表达式的相同字符串。

另外,如果您给 OpenReport 一个空字符串作为 WhereCondition,效果与没有 WhereCondition 相同,因此无论您的 getGlobal(1) 是否返回 True,此(未经测试的)代码都应该有效。

Dim strWhereCondition As String
Dim strReport As String
strReport = "Test"
If (getGlobal(1) = True) Then
    strWhereCondition = "VIP = True"
End If

Select Case Action
Case "View"
    DoCmd.OpenReport strReport, acViewReport, , strWhereCondition
Case "PDF"
    DoCmd.OpenReport strReport, acViewReport, , strWhereCondition
    DoCmd.OutputTo acOutputReport, , acFormatPDF
Case "Print"
    DoCmd.OpenReport strReport, acViewPreview, , strWhereCondition
End Select

还请注意,没有 ObjectName 参数的 DoCmd.OutputTo 使用活动对象...在这种情况下将是“测试”报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    相关资源
    最近更新 更多