VBA实现Excel工作表重命名为上一月「MMM YYYY」格式并修复代码问题
原代码错误原因
- 单独对月份做减法得到的是1~11(非1月时)或0(1月时)的数值,直接传入
Format函数时,VBA会将该数值识别为日期序列号(Windows版Excel默认1900年1月1日对应序列号1),而非你想要的月份值,因此会输出错误的月份归属结果。 - 单独取当前年份拼接,没有处理1月时上年12月的跨年场景,导致年份计算错误。
修正后代码
Sub test() Dim prevMonth As Date ' 直接计算上个月的完整日期,自动适配跨年场景 prevMonth = DateAdd("m", -1, Date) ' 格式化输出为大写MMM YYYY格式 Sheets("Sheet1").Name = UCase(Format(prevMonth, "MMM YYYY")) End Sub
代码说明
- 调用
DateAdd("m", -1, Date)直接生成上个月的完整日期,VBA内置逻辑自动处理跨年:例如当前日期为2022年1月10日,该函数会返回2021年12月10日,无需手动判断月份边界。 - 对完整的上月日期做格式化,避免了数值转日期的解析错误。
- 外层
UCase()函数将输出转为全大写,匹配示例要求的JUN 2021格式,如果不需要大写,去掉该函数即可得到首字母大写的格式。
内容的提问来源于stack exchange,提问作者SQLUser
相关产品推荐
相关产品推荐

