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

VBA中Now()函数返回日期异常,是否为已知问题或操作失误?

你的VBA日期问题出在这,不是Excel的锅哦

这不是Excel的已知问题,是代码写法的小失误加上系统区域设置的影响导致的~

为啥会返回Dez?

你现在的代码是先用Month(Now())取出当前月份的数字(这里是1,对应1月),然后把这个数字丢给Format函数用"mmm"格式。但Format函数遇到数字+日期格式字符串时,不会把数字当成月份编号处理,而是把它当作Excel的日期序列号——也就是从基准日期开始数的天数:

  • 默认的1900日期系统里,序列号1对应1900-01-01(一月),但你得到了德语的十二月(Dez),大概率是你的系统区域设置或者Excel日历配置有点特殊(比如不小心开了1904日期系统?或者区域语言的日期解析规则差异),但核心问题还是用错了Format的用法。

改一下代码就好啦

如果只是想获取当前月份的缩写,直接对Now()(或者Date(),只取日期部分更轻量)做格式化就行,不用多此一举先提取月份数字:

Sub Test_Date ()
    Debug.Print Format(Now(), "mmm") ' 直接格式化日期,一步到位拿月份缩写
    Debug.Print Month(Now())
    Debug.Print Now()
End Sub

这样运行后,就会输出对应语言的一月缩写啦(比如德语是Jan,英语是Jan,法语是Janv)。

要是非要先提取月份数字再格式化

那得把数字转换成一个完整的日期(比如当月第一天),再去格式化:

Debug.Print Format(DateSerial(Year(Now()), Month(Now()), 1), "mmm")

这样也能得到正确的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:54:16