我在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
为什么过滤无法正常工作以及如何解决?
删除,因为它错了。安迪回答是对的。
答案 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一样。