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

Excel VBA设置小于等于动态当日日期的数据验证时报1004错误

解决方案

核心报错原因

你遇到的1004错误在该场景下绝大多数是由Excel界面语言和公式函数名不匹配导致的:你当前使用的是波兰语版Excel(错误提示为波兰语),无法识别英文的NOW()/TODAY()函数,公式解析失败就会触发报错。
除此之外还有两种低频触发原因:

  • 运行代码时选中了图表、形状等非单元格对象,Selection不是合法的单元格区域
  • 当前操作的工作表处于保护状态,不允许修改单元格验证规则

解决方法

1. 优先使用多语言兼容写法(推荐)

用VBA内置的Application.International属性自动适配当前Excel语言对应的今日函数,不需要硬编码函数名,适配所有语言版本的Excel:

' 先校验当前选中的是否为单元格区域
If TypeName(Selection) <> "Range" Then Exit Sub

' 若工作表已保护,先临时取消保护(保护密码如果有就填在Password参数里)
' ActiveSheet.Unprotect Password:="你的密码"

With Selection.Validation
    .Delete
    .Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop, Operator:=xlLessEqual, Formula1:="=" & Application.International(xlTodayFunction) & "()"
    .ErrorMessage = "Wprowadź datę w formacie dd.mm.rrrr"
End With

' 取消保护后需要重新保护的话加上这行
' ActiveSheet.Protect Password:="你的密码"

2. 波兰语版直接写对应本地函数

如果只在波兰语版Excel中使用,也可以直接替换为波兰语的今日函数DZISIAJ():

With Selection.Validation
    .Delete
    .Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop, Operator:=xlLessEqual, Formula1:="=DZISIAJ()"
    .ErrorMessage = "Wprowadź datę w formacie dd.mm.rrrr"
End With

补充说明

如果只需要校验日期不需要校验时间,用今日函数比NOW()更合理,NOW()带时分秒参数,可能会出现当日日期因时间判断不通过的问题。

内容的提问来源于stack exchange,提问作者Filip Frątczak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:27:02