在VBA访问中为查询添加自动日期范围

时间:2012-11-14 14:46:59

标签: ms-access access-vba

这是我的第一个问题,请善待。我在访问中编写一个宏,我希望一系列报告一个接一个地运行。问题是所有报告都有一个需要输入的日期范围。有些是前一个星期有些是上个月。

VBA或宏创建者是否有办法自动计算上个月或周的日期范围,并填充该字段以完全自动化该过程,而无需每次手动输入日期范围。

我是VBA的新手。任何帮助都会很棒,只需指出正确的方向。祝你有个美好的一天。

2 个答案:

答案 0 :(得分:2)

使用MS Access中的查询设计窗口创建此查询,然后从SQL视图中剪切。它将显示上周的记录,其中ww是周数,见表1

SELECT Table1.AKey, Table1.atext, Table1.ADate, 
       Format([ADate],"ww") AS Week, Month([ADate]) AS [Month], 
       Year([ADate]) AS [Year]
FROM Table1
WHERE (((Format([ADate],"ww"))=Format(Date(),"ww")-1)
AND ((Year([ADate]))=Year(Date())));

您会注意到一列名为Month。您可以使用它以与设置上一周类似的方式设置上个月。例如,上周和上个月:

SELECT Table1.AKey, Table1.atext, Table1.ADate, 
       Format([ADate],"ww") AS Week, Month([ADate]) AS [Month], 
       Year([ADate]) AS [Year]
FROM Table1
WHERE (((Format([ADate],"ww"))=Format(Date(),"ww")-1) 
AND ((Year([ADate]))=Year(Date()))) 
OR (((Month([ADate]))=Month(Date())-1) 
AND ((Year([ADate]))=Year(Date())));

SQL可以写得更整齐,但你也可以从查询设计窗口开始。

答案 1 :(得分:0)

我猜日期在你打开的数据库中有一个自己的字段 然后你可以做这样的事情

strSQL = "SELECT * FROM reports WHERE Date >= " & now() -7
rs.open(strSQL)
' for the last week

strSQL = "Select * FROM reports WHERE Date >= " & now() - 30
rs.open(strSQL)
' for the last month

但是您需要将now()格式化为与表格中相同的格式 这只是最简单的代码。我不得不处理类似的事情,这很好用