如何在访问报告中使用过滤字符串中的函数?

时间:2014-06-22 19:33:44

标签: vba access-vba ms-access-2003

我在VBA中定义了一个函数:

Function IsInWeek(RefDate As Date, checkDate As Date) As Boolean
   StartDate = StartOfWeek(RefDate)
   EndDte = EndOfWeek(RefDate)
   If (checkDate >= StartDate And checkDate < Enddate) Then
      IsInWeek = True
   Else
      IsInWeek = False
   End If
End Function

我想在报告的过滤条款中使用它,如下所示:

strFilte = "IsInWeek(#" + Format(InDate, "dd/mm/yyyy") + "#, CalanderDate)"

DoCmd.OpenReport ReportName, acViewPreview,
With Reports(ReportName)
      .Filter = strFilter
      .FilterOn = True
 End With

但它不起作用。该报告包含所有记录。有什么问题,如何解决?我正在使用Access 2003。

注意:我可以使用两者来实现过滤器字符串的功能,但我希望找到上述技术不起作用的原因。

编辑1

这也不行:

 strFilte =  "IsInWeek(#" + Format(InDate, "dd/mm/yyyy") + "#, [CalanderDate])= True"
  If Application.CurrentProject.AllReports(reportname).IsLoaded = True Then
        DoCmd.Close acReport, reportname
   End If
   DoCmd.OpenReport reportname, acViewDesign, strFilter
   DoCmd.OpenReport reportname, acViewPreview

1 个答案:

答案 0 :(得分:0)

DoCmd.OpenReport方法将可选的filter子句作为它的最后一个参数。也许吧:

DoCmd.OpenReport ReportName, acViewPreview, ,"IsInWeek(#" + Format(InDate, "dd/mm/yyyy") + "#, [CalanderDate]) =  True"

就你所尝试的方法不起作用的原因而言,我记得Access对于关于Filter属性的Reports(而不是Forms)特别挑剔;不确定你是否可以这样做。要在不使用带过滤器选项的DoCmd.OpenReport的情况下实现您要执行的操作,我认为您必须在设计模式下打开报表,更改属性,然后更改为预览模式。但我记得表格对此更宽容。但这只是来自记忆。

编辑:我的语法不正确,在参数之间添加了额外的逗号;根据{{​​3}},FilterName是第三个参数,WhereCondition是第四个参数。我在寻找WhereCondition。