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

VBA获取当前月份异常:Format(Month(Date),"mmmm")返回错误月份

问题分析与解决方案

首先说清楚你出错的核心原因:你把月份数字(比如Month(Date)返回的1)直接传给了Format函数的"mmmm"格式符,但Format函数遇到数字时,会把它解析成VBA的日期序列号(也就是从系统基准日期开始算的天数),而不是你以为的月份编号。这就导致你传入的1被当成了某个具体的日期,而不是一月——至于为什么显示December,大概率是系统日期设置的基准或者区域配置有特殊情况,但这不是重点,重点是这个用法本身就不对。

正确的解决方法(不用冗长的if判断)

这里有两种简单直接的方式:

  1. 直接格式化当前日期获取月份名称
    根本不需要先提取月份数字,直接对Date使用Format函数:

    MsgBox Format(Date, "mmmm")
    

    这样就能直接输出当前日期对应的完整月份名称,比如现在是一月就返回"January",完全符合你的需求。

  2. 如果已经有了月份数字,用MonthName函数转换
    如果你是从其他地方拿到了月份数字(比如1),想要转成名称,VBA专门提供了MonthName函数,比自己写判断高效多了:

    MsgBox MonthName(Month(Date))
    

    还可以加第二个参数控制是否缩写,比如MonthName(1, True)会返回"Jan",非常灵活。

另外补充一种思路:如果你想通过构造日期来格式化,也可以这么写(不过上面两种更直接):

MsgBox Format(DateSerial(Year(Date), Month(Date), 1), "mmmm")

通过构造当月第一天的日期,再格式化得到月份名称,结果也是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:42:01