我有一个表单,允许用户通过一些组合框编辑过滤器的属性,然后打开一个报告。该报告以
打开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
答案 0 :(得分:2)
我的错...有些代码因为某些原因在代码页中一直被线条化并且不在视野范围内。有一个On Open与控制源一起玩。它最终没用(因为控制源只需要设置一次,而不是每次都设置)但是由于某种原因它禁用了过滤器。任何可能遇到此问题的人:
确保您的VBA中的控制源未在报告中更改。
感谢那些帮助过的人,抱歉我的信息不对。
我的OnOpen代码:
Private Sub Form_Open(Cancel as Integer)
Me.RecordSource = Me.Name
End Sub
它采用报告的名称,该名称对应于查询的名称,并将其作为记录源。 (我有大约40个报告以这种方式完成,因此它依赖于名称来快速复制不同的项目。)
删除它使得它可以使用Access 2010完美地工作。不确定这是否是特定于我的设置或什么的问题,但是,此更改直接修复了它。
答案 1 :(得分: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
,{ {1}}等条款。在这些情况下,从头开始重新定义查询可能更容易。
答案 2 :(得分:0)
复制报告并重新使用报告时,也可能会出现此问题。我有一个工作正常的报告,然后对其进行了复制,无法再对其进行过滤。
在某些情况下,复制报表时,Access中可能存在故障,导致它忽略了筛选器。
解决方案:尝试复制新报告,链接数据源并将字段复制回原位,而不是复制和重新命名报告。如果要处理新报告,请尝试重新创建。