请求修改VBA日期校验宏:扩展当前月前7天为"ok"状态
修改后的VBA宏代码
以下是满足需求的修改后代码,新增了当前月份起始前7天及之后日期标记为"ok"的判断,同时优化了日期比较逻辑并增加了错误处理:
Sub checkdate() Dim WSStart As Worksheet Dim r As Long, lastrow As Long Dim startOkDate As Date Set WSStart = ThisWorkbook.Worksheets(1) lastrow = WSStart.Cells(WSStart.Rows.Count, "G").End(xlUp).Row ' 计算标记为OK的起始日期:当前月份第一天往前推7天 startOkDate = DateSerial(Year(Date), Month(Date), 1) - 7 For r = 2 To lastrow ' 先判断单元格是否为有效日期,避免非日期值导致报错 If IsDate(WSStart.Cells(r, 7).Value) Then Dim dd As Date dd = WSStart.Cells(r, 7).Value ' 只要日期大于等于起始OK日期,就标记为ok If dd >= startOkDate Then WSStart.Cells(r, 11).Value = "ok" Else WSStart.Cells(r, 11).Value = "not ok" End If Else ' 非日期值统一标记为not ok WSStart.Cells(r, 11).Value = "not ok" End If Next r End Sub
关键改动说明
- 新增起始日期计算:通过
DateSerial(Year(Date), Month(Date), 1) - 7得到当前月份第一天往前推7天的日期,比如2022年7月1日往前推7天就是6月24日,完全匹配你的示例需求。 - 替换日期比较方式:放弃原有的字符串格式比对,改用直接日期数值比较,不仅运算效率更高,还能避免不同日期格式导致的判断错误。
- 增加非日期值处理:加入
IsDate判断,当G列单元格不是有效日期时,自动标记为"not ok",避免宏运行时出现报错。
内容的提问来源于stack exchange,提问作者zzqq
相关产品推荐
相关产品推荐

