获取上周的周一至周五的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