You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ms-Access:如何用DSum筛选本年记录并计算指定客户Standard总和?

解决Access文本框DSum筛选本年记录总和的问题

你遇到的问题核心是日期筛选的语法拼接错误,尤其是对Year()函数返回值的处理和字符串拼接格式的问题,我们一步步来修正:

错误原因分析

你之前尝试添加年份条件时,错误地用#包裹了年份数值(#是Access中用于包裹完整日期值的符号,而年份是整数,不需要),同时字符串拼接的逻辑也有疏漏,导致Access无法识别表达式,进而出现Name?Error错误。

正确的DSum表达式

针对你的需求,正确的表达式应该是:

=DSum("[Standard]", "Training", "[Client] = '" & [Client] & "' AND Year([Date]) = " & Year(Date()))

关键细节说明:

  • 字段名转义:你的日期字段名为Date,这是Access的保留字,必须用方括号[Date]括起来,避免语法冲突。
  • 年份比较逻辑Year([Date])提取记录中日期的年份,Year(Date())获取当前系统年份,两者都是整数类型,直接用=比较即可,不需要额外的日期分隔符。
  • 字符串拼接:确保AND条件包含在筛选字符串中,并且引号和连接符&的位置正确,保证整个筛选条件是一个完整的字符串。

更高效的替代写法(推荐)

如果你的Training表中Date字段有索引,使用日期范围筛选会比Year()函数更高效(Access可以利用索引快速定位记录):

=DSum("[Standard]", "Training", "[Client] = '" & [Client] & "' AND [Date] >= DateSerial(Year(Date()), 1, 1) AND [Date] <= DateSerial(Year(Date()), 12, 31)")

DateSerial(Year(Date()), 1, 1)会生成当前年份的1月1日,DateSerial(Year(Date()), 12, 31)生成当前年份的12月31日,这样精准限定了本年的日期范围。

验证你的示例数据

用正确的表达式计算时:

  • Client A的2018年记录是12,总和为3,完全符合你的需求;
  • 会自动忽略2017年的记录和其他客户的本年记录。

内容的提问来源于stack exchange,提问作者Matt Jenkins

火山引擎 最新活动