今天是 2013 年 2 月 27 日,星期三。 我需要公式来返回上周一的日期。即 (02/17/2013)
我需要这样才能在发送电子邮件的 vba 代码中使用文件名或电子邮件主题。
With oMail
'Uncomment the line below to hard code a recipient
.To = "[email protected]"
'Uncomment the line below to hard code a subject
.Subject = "Current Report"
.Attachments.Add WB.FullName
.Display
End With
Public Function LastMonday(pdat As Date) As Date
LastMonday = DateAdd("ww", -1, pdat - (Weekday(pdat, vbMonday) - 1))
End Function
Weekday(yourdate, vbMonday) 返回 1 表示星期一,2 表示星期二,等等
pdat - (Weekday(pdat, vbMonday) - 1)
通过从过去的日期中减去 Weekday()-1 天数,可以得到最近的星期一。
DateAdd("ww", -1, ...)
从该日期减去一周。
LastMonday(cdate("2/27/13"))
返回 2/18/2013(这是星期一,而不是 17 日)
计算 Weekday(Now()) 和 2(= 周一的工作日)之间的差,然后添加 7。
Dan 的答案应该可以满足您对 VBA 的需求
或者在 Excel 工作表公式中,您可以执行以下操作:
=TEXT(DateCell- (WEEKDAY(DateCell,2)-1),"dddd mmmm dd")
所以 DateCell 是一个包含您要查找上周一日期的日期的范围!
因此,如果您将 08/04/2012 输入 DateCell,那么该公式将在 4 月 2 日星期一重新运行!
(归功于 MrExcel.com 和 Google 搜索!) 华泰 菲利普
为了使接受的答案的功能更加通用,进行一些小的更改可以让您指定一周中的哪一天以及您想要的后退/前进多远。
Public Function LastDow(pdat As Date, dow as integer, _&
optional weeksOffset = -1 as integer) As Date
LastDow = DateAdd("ww", weeksOffset, pdat - (Weekday(pdat, dow) - 1))
End Function
通过此功能,您可以获取下周三的信息:
dim myDt as date
dim nextWed as date
myDt = now()
// Get next Wednesday (dow = Wednesday, weeksOffset is +1
x = LastDow(myDt, vbWednesday, 1)
再次感谢原始解决方案作者(Dan Meltheus)。
获取今天起的上周一日期:
Function GetLastMonday() As Date
Dim today As Date
Dim daysBack As Integer
today = Date
daysBack = Weekday(today, vbMonday) - 1
GetLastMonday = DateAdd("d", -daysBack, today)
End Function