我在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。
注意:我可以使用两者来实现过滤器字符串的功能,但我希望找到上述技术不起作用的原因。
这也不行:
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
答案 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。