获取上周的周一至周五的date

我试图实现这个答案来得到上周的星期一到星期五的date,testing这个:

Public Sub listPreviousWeekDays() Dim dayCtr As Long For dayCtr = 2 To 6 Debug.Print DateAdd("ww", -1, Now - (Weekday(Now, dayCtr) - 1)) Next End Sub 

但是,这给了:

 4/10/2017 9:27:18 AM 4/11/2017 9:27:18 AM 4/12/2017 9:27:18 AM 4/6/2017 9:27:18 AM 4/7/2017 9:27:18 AM 

我的目标是回报:

 4/10/2017 9:27:18 AM 4/11/2017 9:27:18 AM 4/12/2017 9:27:18 AM 4/13/2017 9:27:18 AM 4/14/2017 9:27:18 AM 

编辑:为了避免一个XY的问题 ,我会解释我想做的事情:我想要运行一个macros,填写与上周的周一至周五的date单元块。

更新

正如OP所指出的,当开始date是星期天时,链接的代码不适用于这个特定的用例。 这是一个修复:

 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的第二个参数没有指定你想要的date 。 而是指定一周中的哪一天是第1个工作日 ( 某些文档 )。 而不是搞Weekday ,只需要使用链接的答案获得星期一,然后根据需要添加date。

这应该解决这个问题。

 Public Sub listPreviousWeekDays() Dim dayCtr As Long For dayCtr = 2 To 6 Debug.Print DateAdd("ww", -1, Now - (Weekday(Now, vbUseSystemDayOfWeek)) + dayCtr) Next End Sub