2

我有一个表单,它允许用户通过一些组合框编辑过滤器的属性,然后打开一个报告。报告以

DoCmd.OpenReport rptName, acViewReport, , whereClause, acWindowNormal
'whereClause = "Building = '005'" for instance

一些报告可以正常打开,我的意思是它们填充了过滤后的信息。然而,其他人,即使它们基于相同的内部模板,也忽略过滤器并显示基于所有数据(而不是过滤数据)的报告。

为什么报告会忽略过滤器?当我在使用表单打开报告后以设计模式编辑报告时:

Working Report              |       Non Working Report
Filter: Building = '005'    |       Filter:  
Filter On Load: No          |      Filter On Load: No

什么可能导致非工作报告不注册过滤器参数?这些报告中没有 On Load VBA,也没有任何 VBA(导出到 PDF 和每个报告的复制粘贴关闭按钮除外)。

编辑 之前应该检查过,无论驱动报告的查询是否为空,都会发生这种情况(即过滤器永远不会应用于某些报告,无论是否为空白)

不确定代码是否有帮助,但是:

Private Sub btnOpenSummary_Click()
  If IsNull(Me.cboSummary) Then
      MsgBox "Please select a building for the SUMMARY report."
      Exit Sub
  End If
  strCrit = "Building = '" & Me.cboSummary & "'"
  MsgBox strCrit
  survArray = getSurveyArray()
  For Each Survey In survArray
      DoCmd.OpenReport Survey, acViewReport, , strCrit, acWindowNormal
  Next Survey
  DoCmd.OpenReport "Total Summary", acViewReport, , , , Me.cboSummary
End Sub
4

3 回答 3

2

我的错..由于某种原因,代码页一直被换行并看不见。有一个使用控制源播放的 On Open。它最终变得无用(因为控制源只需要设置一次,而不是每次),但由于某种原因它禁用了过滤器。其他可能遇到此问题的人:

确保控制源没有在您的 VBA 中为报告更改。

感谢那些帮助过的人,对不起,我的信息是错误的。

我的 OnOpen 代码:

Private Sub Form_Open(Cancel as Integer)
   Me.RecordSource = Me.Name
End Sub

它采用与查询名称相对应的报告名称,并将其作为记录源。(我以这种方式完成了大约 40 份报告,因此它依赖于名称来快速复制不同的项目)。

删除它使其使用 Access 2010 完美运行。不确定这是否是特定于我的设置的问题或什么,但是,此更改直接修复了它。

于 2012-08-23T13:21:43.170 回答
1

这不是一个直接的解决方案,而是一个几乎可以肯定有效的解决方法。无需对报表应用过滤,而是通过将 where 子句作为参数传递来动态更改报表数据源。

要打开报告,请使用:

DoCmd.OpenReport rptName, acViewReport, , , acWindowNormal, whereClause

请注意,whereClause字符串作为OpenArgs参数传递。

然后在报表VB中:

Private Sub Report_Open(Cancel As Integer)
On Error GoTo ReportOpenError

    If Not(IsNull(Me.OpenArgs)) Then
        Me.RecordSource = Replace(Me.RecordSource,";"," WHERE " & Me.OpenArgs & ";")
    End If

    Exit Sub

ReportOpenError:
    MsgBox "Unable to open the specified report"
    Cancel = 1
End Sub

此解决方案假定报表RecordSource被定义为以分号结尾的 SQL 查询(不是查询名称),并且记录源尚未包含任何WHERE,GROUP BY等子句。在这些情况下,从头开始重新定义查询可能更容易。

于 2012-08-23T13:34:17.117 回答
0

当报表被复制和重新使用时,也可能出现此问题。我有一份工作正常的报告,然后制作了一份副本,并且不再能够过滤它。

在某些情况下复制报告时,Access 中可能存在故障,导致它忽略过滤器。

解决方案:不要复制和重命名报表,而是尝试创建一个新报表,链接数据源,然后将字段复制回原位。如果您正在处理新报告,请尝试重新创建它。

于 2019-05-12T16:35:25.843 回答