为什么此过滤器在MS Access中无法正常工作

时间:2014-06-02 21:21:58

标签: vba ms-access

我在VBA中有这段代码:

FilterString = "CalanderDate<#" & EndOfWeek(InDate) & "# AND CalanderDate >#" & StartOfWeek(InDate) & "#"
Me.Filter = FilterString
Me.FilterOn = True

EndOfWeek和StartOfWeek的代码如下:

Function StartOfWeek(InDate As Date) As Date
inWeekday = Weekday(InDate, vbMonday)
StartOfWeek = InDate - inWeekday + 1
End Function

Function EndOfWeek(InDate As Date) As Date
EndOfWeek = StartOfWeek(InDate) + 7
End Function

我们的想法是根据特定周内的日期(同一周和日期)过滤数据

但是当我跑这个时,我的行为很奇怪:

如果InDate是2/6/2014,那么我有以下日期的记录:

12/05/2014
21/05/2014
22/05/2014
23/05/2014

其中没有一个属于2014年2月6日至9/6/2014的一周

如果我将inDate设置为20/05/2014,我将获得以下记录:

21/05/2014
22/05/2014
23/05/2014

为什么过滤无法正常工作以及如何解决?

EDIT1

删除,因为它错了。安迪回答是对的。

1 个答案:

答案 0 :(得分:1)

CalanderDate<#" & EndOfWeek(InDate) & "# AND CalanderDate >#" & StartOfWeek(InDate) & "#"

访问对日期格式很挑剔,特别是恢复为美国格式mm / dd / yyyy。

在上面的表达式中,使用Format()和:

Format(EndOfWeek(InDate),"mm/dd/yyyy")

Format(EndOfWeek(InDate),"yyyy-mm-dd")

和StartOfWeek一样。