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
相关产品推荐
相关产品推荐

