更新
正如 OP 所指出的,当开始日期是星期日时,链接代码不适用于此特定用例。这是一个修复:
Option Explicit ' always always always use this
Public Function MondayLastWeek(pdat As Date) As Date
Dim weekday_increment As Long
weekday_increment = weekday(pdat, vbMonday) - 1
MondayLastWeek = DateAdd("ww", IIf(weekday_increment = 6, 0, -1), pdat - weekday_increment)
' IIf: if we're on Sunday, pdat-weekday_increment is already the date we want.
End Function
Public Sub listPreviousWeekDays()
Dim monday As Date
monday = MondayLastWeek(Now)
Dim dayCtr As Long
For dayCtr = 0 To 4
Debug.Print monday + dayCtr
Next
End Sub
原答案
这对我有用:
Public Sub listPreviousWeekDays()
' First, get last week's Monday just as in the linked question
Dim LastMonday As Date
LastMonday = DateAdd("ww", -1, Now - (Weekday(Now, vbMonday) - 1))
' Then, loop over the rest of the week.
' Monday + 0 days => Monday
' Monday + 4 days => Friday
Dim dayCtr As Long
For dayCtr = 0 To 4
Debug.Print LastMonday + dayCtr
Next
End Sub
输出:
4/10/2017 12:38:17 PM
4/11/2017 12:38:17 PM
4/12/2017 12:38:17 PM
4/13/2017 12:38:17 PM
4/14/2017 12:38:17 PM
我认为问题在于Weekday 的第二个参数没有指定您想要的哪一天。相反,它指定一周中的哪一天是工作日编号 1 (some documentation)。不要乱用Weekday,只需使用linked answer 获取星期一,然后根据需要添加日期。