2017-07-26 73 views
0

寻找改变这种Microsoft Word中VBA代码,以便截止日期始终是每星期的星期一不是一个具体的日期:的Microsoft Word VBA截止日期

Sub MyMacro() 

ExpirationDate = #6/1/2013# 
If Now() < ExpirationDate Then 

    'Rest of macro goes here 

End if 
End Sub 

如何做到这将是任何想法伟大的:)

回答

1
If Weekday(Date) = 2 Then ... 'Monday 
+0

这个很好用。如果我需要它在特定的时间运行呢?我很好奇,如果这是可能的 – MAJ10

+0

感谢您的反馈。您可以通过检查时间来扩展if语句,如以下帖子所示:[time operations](https://stackoverflow.com/a/8924251/8355222)。 如果您想在特定时间启动宏,请查看:[如何安排Excel宏](https://stackoverflow.com/a/8915209/8355222) – user8355222

1
Public Function FindMonday(dt As Date) As Date 
    Do Until WeekdayName(Weekday(dt)) = "Monday" 
    dt = DateAdd("d", 1, dt) 
    Loop 
    FindMonday = dt 
End Function 
0

ExpirationDate = (Date + 7) - (Weekday(Date) - Weekday(vbMonday))

这个公式总是会返回日期按照“+7”指定的下一个星期一 您无需声明变量Expirationdate

If Date < (Date + 7) - (Weekday(Date) - Weekday(vbMonday)) Then 将完成这项工作。

请注意,Now返回日期/时间值,而Date返回日期整数。如果时间是至关重要的,您必须添加它。将上述公式添加0.5,以确定下周一中午12点的到期时间。

0

我通常使用此功能:

Public Function PreviousMonday(CurrentDate As Date) As Date 
    PreviousMonday = CurrentDate - Weekday(CurrentDate - 2) 
End Function 

然后,您可以将其称为:
PreviousMonday(Date()) - 将返回24/07/2017如果进入今天(28日)。 PreviousMonday(CDATE("1 July 2017")) - 将返回26/06/2017
PreviousMonday(42430)将返回29/02/2016(42430 = 2016年3月1日)。