最近12个月MS Access VBA的总费用

问题描述

我有一个访问数据库表格,我想对字段[费用]的总费用求和,但仅是最近12个月的费用。我也有一个日期字段,它是记录的完整日期,例如2020年9月25日。

如果可能的话,我想排除任何尚未结束的月份。例如,如果是9月中旬,我希望排除9月。这不是必需的,只是可以满足的。

为了进一步说明,我已经为所有记录提供了总计,但是我想要另一个显示最近12个月的记录。我不想手动指定日期范围,例如01/01/2020到01/01/2021。我想自动汇总最近12个月的记录,如果添加了新记录,或者如果排除了不完整的月份,则在新的月份开始时会自动更新。

我不想使用报告来执行此操作,因为那将意味着打开另一个页面,如果必须这样,则用户将永远不会检查总计。

我也不知道如何使用sql,因此,如果可以使用普通的VBA代码来完成它,那将是惊人的。

编辑。我现在有了接受的答案中使用的代码,现在可以正常工作。我无法为自己的生活制定出如何使一个日期范围内的总和。唯一的问题是它不会自动更新,但是我可以接受。只要它在窗体打开时显示就可以了。

解决方法

尝试下面的文本框数据源表达式。

from selenium import webdriver

import os

# Set proper profile
profile = webdriver.FirefoxProfile()
profile.set_preference("security.fileuri.strict_origin_policy",False) # disable Strict Origin Policy
profile.set_preference("dom.webdriver.enabled",False) # disable Strict Origin Policy

# Capabilities
capabilities = webdriver.DesiredCapabilities.FIREFOX
capabilities['marionette'] = True

# Options
options = webdriver.FirefoxOptions()
options.add_argument("--log-level=OFF")

# Using non Headless for debugging
options.headless = True

driver = webdriver.Firefox(service_log_path=os.devnull,options=options,capabilities=capabilities,firefox_profile=profile)
driver.set_window_size(1920,1080)

driver.get('https://www.google.com')

print(driver.page_source)
driver.quit()

enter image description here

,

我会尝试这样的事情:

  1. 仅用于费用:
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)
  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)
GROUP BY FORMAT(yt.DateField,"yyyy-MMM")

注意:

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

DateSerial(Year(Date()),Month(Date()),0)根据今天的日期返回上个月的最后一天:)

有关更多详细信息,请参见:DateSerial Function