无法清除访问报告过滤器

时间:2017-03-07 21:26:50

标签: access-vba ms-access-2013 ms-access-reports

我的报告列出了几次会议,每次会议都有几条记录。我已设置弹出窗体,使用组合框选择单个特定会议日期,并使用该窗体过滤表单以进行打印。 (内置的过滤点击是笨重的,显然组合框不适用于报告。)这一切都在第一次正常工作。当我尝试选择不同的会议日期时问题出现了 - 尽管所有努力都要清除过滤器,报告仍会显示所选择的第一个会议,而不是关闭表单并重新打开。我已将以下代码放在打开选择表单的报告按钮中:

Private Sub cmdMeetingSelect_Click()
'Clear any pre-existing filter
    Me.Filter = ""
    Me.FilterOn = False
'Open form to filter the report
    DoCmd.OpenForm "frmMeetingSelect"
End Sub

表单打开,我看到报表上的过滤器已关闭,我可以在表单上选择新日期,但旧日期仍用​​于再次过滤报表。 / p>

在选择表格中包含以下内容并不起作用:

Private Sub Form_Open(Cancel As Integer)
    Me.cboMeetingSelect = ""
End Sub 

这是选择表单中的代码,将过滤器选项发送回报告。不确定它是否能让它只运行一次:

Private Sub cmdFilterMeeting_Click()
'Run a filter on the RSVPAttendance report
    Reports!rptRSVPAttendance.Filter = "MeetingDate = Forms!frmMeetingSelect.cboMeetingSelect"
    Reports!rptRSVPAttendance.FilterOn = True
'Close selection form
    DoCmd.Close
End Sub

点击报告中的Advanced -> Clear All Filters也无效。

我已经看到一些关于在Access 2010中使用组合框过滤表单的错误的旧报告,但是现在肯定已经解决了?我还缺少什么?

2 个答案:

答案 0 :(得分:2)

你的过滤字符串很奇怪。它应该是:

Reports!rptRSVPAttendance.Filter = "MeetingDate = #" & Format(Forms!frmMeetingSelect.cboMeetingSelect.Value, "yyyy\/mm\/dd") & "#"

答案 1 :(得分:0)

这里有几件事似乎很奇怪:

  1. 在cmdMeetingSelect_Click中删除这些行,它们没有为您的报表执行任何操作,它控制窗体上的过滤器: Me.Filter =“” Me.FilterOn = False

  2. 您的过滤条件中存在语法错误,但除了这一点之外。我认为您希望在报告当前打开时进行过滤更改。这将无法工作,您必须关闭报告并重新打开它,并且您无法以这种方式更改过滤器。我建议你做的是在报告上设置where条件而不是尝试应用过滤器。在此之前,请在设计模式下打开该报告,并删除任何现有过滤器,并关闭过滤器。然后使用以下内容替换cmdFilterMeeting_Click中的内容:

  3. Const RptName As String =“rptRSVPAttendance”

     'close report if already open
     If SysCmd(acSysCmdGetObjectState, AcObjectType.acReport, RptName) = 1 Then   'report is open
      DoCmd.Close acReport, RptName
     End If
    
     'open report with where criteria, no filtering needed
     DoCmd.OpenReport RptName, acViewPreview, , ("[MeetingDate] = #" & Me.cboMeetingSelect.Value & "#")
    
    'close form
     DoCmd.Close acForm, Me.Name