VBA代码问题:按前工作日日期存文件(周一需取周五日期)
问题排查与代码修正
嘿,我来帮你搞定这个日期命名的问题~你的代码里有两个关键错误导致周一的时候没输出周五的日期,咱们一步步来修正:
错误分析
- 条件判断逻辑颠倒:你现在写的
If FileDate = Weekday(Date, vbMonday)是拿还没赋值的FileDate去和当前日期的星期数比较,这完全不合理。咱们应该直接判断当前日期是不是周一才对。 - 赋值语句语法错误:周一分支里的
Format(DateAdd("d", -3, Date)) = "yyyymmdd"写反了——你是把格式字符串赋值给了Format函数的结果,而不是把格式化后的日期赋值给FileDate,这不符合VBA的语法规则。
修正后的完整代码
Dim FileDate As String ' 判断当前日期是否为周一(vbMonday让周一作为一周的第1天) If Weekday(Date, vbMonday) = 1 Then ' 周一的话,往前推3天就是上周五的日期 FileDate = Format(DateAdd("d", -3, Date), "yyyymmdd") Else ' 其他工作日,直接取前一天的日期 FileDate = Format(DateAdd("d", -1, Date), "yyyymmdd") End If
逻辑说明
- 用
Weekday(Date, vbMonday) = 1可以精准判断当前是周一:当vbMonday作为参数时,Weekday函数返回1代表周一,7代表周日,这样判断更直观。 - 周一需要减3天:因为周一往前数1天是周日,2天是周六,3天才是上周五,刚好跳过周末。
- 其他工作日直接减1天,就能得到前一个工作日的日期,最后统一格式化为
yyyymmdd的字符串。
内容的提问来源于stack exchange,提问作者kms5549
相关产品推荐
相关产品推荐

