2015-10-28 81 views
0

我正試圖在Access中編寫一個查詢來查詢最新的銷售記錄以生成報表。我想我需要編寫一個VBA模塊來計算這些日期。銷售年迄今爲止從前一週末和去年年底

我需要一個日期範圍爲上個星期六(從本週報告的2015年1月1日到2015年10月24日)。我還需要調查去年迄今的記錄(例如從2014年1月1日到2014年10月25日這周的報告)。

關於如何查詢此日期範圍的任何建議?

謝謝!

回答

0

考慮使用兩個字段(ID,SalesDate)中的臨時表格,例如YTDDates,該表格包含可按需清理的日期範圍。然後將您的銷售數據加入此表以進行日常報告。

VBA可以從開始(2015年1月1日)到結束(2015年10月24日)的所有日期運行循環,並使用DateAdd()函數反覆追加到臨時表。

Dim db As Database 
Dim startDate As Date, endDate As Date, d As Date 
Dim diff As Integer, i as Integer 

Set db = CurrentDb() 

startDate = #1/1/2015# 
endDate = #10/24/2015#  
diff = DateDiff("d", startDate, endDate) 

' CLEAN OUT PRIOR DATE RECORDS 
db.Execute "DELETE FROM YTDDates", dbFailOnError 

For i = 0 To diff 

    d = DateAdd("d", i, startDate) 
    db.Execute "INSERT INTO YTDDates ([SalesDate]) VALUES (#" & d & "#);", dbFailOnError 

Next i 

Set db = Nothing 
+0

感謝您的答覆。我想我有點理解你的想法,但必須有一個更簡單的方法。 我想用下面的代碼找到當前周的週六: '昏暗TDate截止日期 昏暗TDay作爲整數 昏暗SatFinder作爲整數 昏暗SatDate截止日期 TDate =日期 TDay =平日(TDate ) SatDate = TDate - SatFinder' 但是有沒有一個函數來查找當前週數?防爆。如果這是今年的第41周,我將如何從去年的第40周找到星期六? –

+0

我的答案會將一個日期範圍輸出到表中,但您可以輕鬆地移除對錶的任何需求並將範圍的所有日期傳遞給VBA數組或集合。要獲得星期編號,請使用[DatePart()](http://www.techonthenet.com/access/functions/date/datepart.php)函數,指定'ww'參數。 – Parfait

0

而不是一個臨時表中我會使用BETWEEN子句只使用一個公式中查詢您的日期字段用這樣一個公式:

vba.DateSerial(Year(Now()),Month(Now()),Day(Now())-Weekday(Now(),vbSunday)) 

Weekday函數返回從週日的整數(使用vbSunday)。所以在週一它會返回'2',並且在星期六它會返回'7',這會給你前一週的星期六日期。

爲了得到一年時間的開始,你可以使用這樣的函數:

vba.DateSerial(Year(Now()),1,1)