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

如何修正VBA时间戳脚本以实现与TODAY()公式的正确日期对比?

问题解决方法

核心问题是你用Format()把日期转成了字符串类型,而TODAY()返回的是Excel的日期序列号(数值型),两者类型不匹配,所以即使显示相同也会返回False。

修改方案很简单:让单元格存储原始日期数值,只通过格式设置来显示成你要的样式,具体改动如下:

修改后的VBA代码

Private Sub Worksheet_Change(ByVal Target As Range)
  Const ColumnsToMonitor As String = "k:z"
  Const DateColumn As String = "j"
  
  ' 禁用事件防止循环触发
  Application.EnableEvents = False
  
  If Not Intersect(Target, Columns(ColumnsToMonitor)) Is Nothing Then
    With Intersect(Target.EntireRow, Columns(DateColumn))
      ' 直接赋值日期数值(用Date只存日期部分,和TODAY()匹配度更高)
      .Value = Date
      ' 设置显示格式为你需要的样式
      .NumberFormat = "ddd d/mm"
    End With
  End If
       
  Application.EnableEvents = True
End Sub

关键改动说明

  • 去掉Format(Now, "ddd d/mm"),直接赋值Date(如果需要保留时间部分,就改成Now,但对比时要使用INT(J2)=TODAY()来忽略时间部分)
  • 用.NumberFormat设置单元格的显示格式,这样单元格内部存的是日期数值,显示的是你需要的ddd d/mm样式
  • 修正了原代码重复设置Application.EnableEvents = True的问题,改为先禁用再恢复

测试验证

修改后,J2单元格存储的是Excel可识别的日期数值,公式=IF(J2=TODAY(),1,0)会在日期相同时正常返回1;手动修改日期时,只要输入Excel能识别的日期格式,也能正常参与对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:13:15