You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需用户输入的特殊周期日期范围查询条件更新方案

解决方案:Access非标准周期(12.1-次年11.30)自动累计工时设置

一、核心:自动计算当前周期的起止日期

你的周期是当年12月1日至次年11月30日,用Access内置日期函数就能自动判断当前所属周期,完全不需要用户干预:

  • 周期开始日期表达式:
    IIf(Month(Date())>=12, DateSerial(Year(Date()),12,1), DateSerial(Year(Date())-1,12,1))
    
  • 周期结束日期表达式:
    IIf(Month(Date())>=12, DateSerial(Year(Date())+1,11,30), DateSerial(Year(Date()),11,30))
    

逻辑说明:如果当前月份≥12,周期是「当年12月1日 → 下一年11月30日」;否则是「上一年12月1日 → 当年11月30日」,每年12月1日会自动切换到新周期。

二、查询中设置自动日期筛选

在你的工时数据表查询里,给「工时日期」字段添加以下条件,就能自动筛选当前周期的记录:

Between IIf(Month(Date())>=12, DateSerial(Year(Date()),12,1), DateSerial(Year(Date())-1,12,1)) And IIf(Month(Date())>=12, DateSerial(Year(Date())+1,11,30), DateSerial(Year(Date()),11,30))

三、表单显示累计可计费工时

在录入表单中添加一个文本框(比如命名为txt累计工时),设置它的控件来源为以下两种方式之一:

方式1:直接基于数据表计算

替换[可计费工时]和工时数据表为你实际的字段名和表名:

=DSum("[可计费工时]", "工时数据表", "[工时日期] Between " & Format(IIf(Month(Date())>=12, DateSerial(Year(Date()),12,1), DateSerial(Year(Date())-1,12,1)), "\#mm\/dd\/yyyy\#") & " And " & Format(IIf(Month(Date())>=12, DateSerial(Year(Date())+1,11,30), DateSerial(Year(Date()),11,30)), "\#mm\/dd\/yyyy\#"))

方式2:基于已创建的筛选查询

如果你已经做好了上面的筛选查询(比如叫当前周期工时查询),直接用更简洁的表达式:

=DSum("[可计费工时]", "当前周期工时查询")

四、确保数据实时更新

  • 表单打开时刷新:在表单的On Open事件中添加VBA代码:Me.Requery,确保打开表单时加载最新累计数据。
  • 录入工时后更新:在表单的After Update事件中添加:Me.txt累计工时.Requery,用户录完工时后累计数立即更新。
  • 若不想用VBA:可设置文本框的「刷新间隔」为60秒(在控件属性中查找),实现自动刷新。

五、测试验证

手动修改系统日期即可验证逻辑:

  • 设为11月30日:累计数为上一年12月至当年11月的总工时;
  • 设为12月1日:累计数自动切换为新周期(当年12月至次年11月)的数值,未录工时则显示0。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:00:23