我需要计算过去12个月中人们轮班工作的数量。我想使用DateSerial
。如果我输入实际日期,而不是DateSerial
,我的代码会有效。我通过更改DateSerial
以返回十二个月前的日期来测试我的代码,但我的代码总是给出所有数据总和的数字 - 回溯超过十二个月。所以它忽略了MyDt。我哪里错了?
Public Function Shifts() As Integer
Dim MyDt As Date
MyDt = DateSerial(Year(Date), Month(Date) - 12, 1) - 1
Shifts = DSum("Shifts", "tblWorkNew", "GP = " & GPLookup & "And Month > #31/10/2012#") 'This works for any date.
Shifts = DSum("Shifts", "tblWorkNew", "GP = " & GPLookup & "And Month > " & MyDt) 'This only gives all data, i.e. ignores MyDt
End Function
答案 0 :(得分:3)
MyDt
是日期/时间,但您将其作为字符串包含在DSum
条件参数中。因此,将值转换为db引擎识别为您想要的日期的字符串。
Shifts = DSum("Shifts", "tblWorkNew", _
"GP = " & GPLookup & _
" And [Month] > " & Format(MyDt, "\#yyyy-mm-dd\#"))
我在And
之前添加了一个空格,因为看起来有一个空缺。我假设Month
是tblWorkNew
表中字段的名称,因此将其括在方括号中以通知数据库引擎您不希望使用Month()
函数。