Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
过去12个月MS Access VBA的总成本_Vba_Ms Access - Fatal编程技术网

过去12个月MS Access VBA的总成本

过去12个月MS Access VBA的总成本,vba,ms-access,Vba,Ms Access,我有一个access数据库表单,我想计算字段[Cost]的总成本,但仅限于过去12个月。我还有一个日期字段,它是记录的完整日期,例如25/09/2020 如果可能的话,我想排除任何尚未结束的月份。例如,如果是9月中旬,我希望将9月排除在外。这不是一个要求,只是一个很好的要求 为了进一步解释,我已经有了所有记录的总数,但我想要另一个只显示过去12个月的总数。我不想手动指定日期范围,如2020年1月1日至2021年1月1日。我希望自动汇总最近12个月的记录,如果不包括不完整的月份,则在添加新记录时/

我有一个access数据库表单,我想计算字段[Cost]的总成本,但仅限于过去12个月。我还有一个日期字段,它是记录的完整日期,例如25/09/2020

如果可能的话,我想排除任何尚未结束的月份。例如,如果是9月中旬,我希望将9月排除在外。这不是一个要求,只是一个很好的要求

为了进一步解释,我已经有了所有记录的总数,但我想要另一个只显示过去12个月的总数。我不想手动指定日期范围,如2020年1月1日至2021年1月1日。我希望自动汇总最近12个月的记录,如果不包括不完整的月份,则在添加新记录时/或在开始新的月份时,这些记录将立即更新

我不想使用报告来做这件事,因为这意味着打开一个不同的页面,如果必须这样做,用户将永远不会检查总数

我也不知道如何使用SQL,所以如果能用普通的VBA代码来实现,那将是令人惊讶的


编辑。我现在有了公认答案中使用的代码,它现在运行良好。我一辈子都不知道如何计算一个日期范围的总和。唯一的问题是它不会自动更新,但我可以接受。只要它在窗体打开时显示,就可以了。

请在文本框的数据源下面的表达式中进行尝试

=DSum("[Cost]","[Table1]","[cDate]>=#" & DateAdd("m",-12,Date()) & "# AND [cDate]<=#" & Date() & "#")

=DSum(“[Cost]”、“[Table1]”、“[cDate]>=#”和DateAdd(“m”、-12,Date())&“#和[cDate]”我会尝试这样的事情:

  • 仅适用于成本:
  • 对于成本和月份;)
  • 注:

    DateSerial(Year(Date()),1,1)
    基于今天的日期返回今年1月1日:)

    DateSerial(年(日期()),月(日期()),0)
    基于今天的日期返回上月的最后一天:)


    有关更多详细信息,请参阅:

    谢谢您的帮助,我现在需要它做什么就做什么。除了说明具体日期之外,我无法确定应该如何指定日期范围。
    SELECT SUM(yt.Cost) AS SumOfCost
    FROM YourTable yt
    WHERE yt.DateField BETWEEN DATESERIAL(YEAR(Date), 1, 1) 
        AND DATESERIAL(YEAR(Date), MONTH(yt.DateField), 1-1)
    
    SELECT FORMAT(yt.DateField, "yyyy-MMM") As CMonth, SUM(yt.Cost) AS SumOfCost
    FROM YourTable yt
    WHERE yt.DateField BETWEEN DATESERIAL(YEAR(Date), 1, 1) 
        AND DATESERIAL(YEAR(Date), MONTH(yt.DateField), 1-1)
    GROUP BY FORMAT(yt.DateField, "yyyy-MMM")