从日期开始返回下一个星期五的函数

时间:2018-07-06 09:25:34

标签: excel-vba vba excel

在规划项目时,我们以周为单位给出大致的工期。从今天的下一个星期一开始一个项目。

df1.withColumnRenamed

使用此代码,我可以为单元格分配正确的日期(下周一)。现在我需要从该日期开始下一个星期五12周。 (84天)

为此,我使用了之前的代码并对其进行了一些调整。

Public Function NextMonday() As Date

Dim D As Integer
Dim N As Date

D = Weekday(Now)
N = Now() + (9 - D)

NextMonday = N

End Function

现在,主模块的代码如下;

Public Function NextFriday(AproxDate As Date) As Date

Dim E As Integer
Dim M As Date

E = Weekday(Now)
M = AproxDate + (14 - E)

NextFriday = M

End Function

NextMonday部分工作正常,但是在运行NextFriday时,尝试设置EndDate.Value = NextFriday时会收到“参数不是可选的”。

我似乎找不到此代码的问题。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

这不是从函数中获取值的方式:

Call NextFriday(AproxDate)
EndDate.Value = NextFriday

如果您希望函数NextFriday基于(AproxDate)返回的值,并且希望该值在单元格EndDate中,那么(而不是上面的两行)您将使用:

EndDate.Value = NextFriday(AproxDate)

如果您不希望从中返回值,则仅将Call与函数一起使用。


简化程序:

您的过程不必要地过于复杂。

信不信由你,这与您的过程完全相同

Public Function NextMonday() As Date
    NextMonday = Now() + (9 - Weekday(Now))
End Function

Public Function NextFriday(AproxDate As Date) As Date
    NextFriday = AproxDate + (14 - Weekday(Now))
End Function

Private Sub Worksheet_Activate()

    .Range("C15")= NextMonday
    ThisWorkbook.Sheets("Sheet1").Range("C16")= NextFriday(NextMonday + 84)
End Sub

简化的甚至更多

再往前走,这是1个子,完全相同

Private Sub Worksheet_Activate()
    With Sheets("Sheet1")
        .Range("C15") = Now() + (9 - Weekday(Now))
        .Range("C16") = (.Range("C15") + 84) + (14 - Weekday(Now))
    End With
End Sub

还要注意的一点是,函数Now返回当前日期和时间。如果只是您感兴趣的日期,请使用函数Date

答案 1 :(得分:1)

您的下星期五函数有2个错误。

1)从星期一到星期五的工作日是+4而不是+5(因此您得到下星期一= +9和下星期五= +(9 + 4))

2)您在下一个星期五代码中使用了now()而不是aproxdate

您下一个星期五的代码应为:

Public Function NextFriday(AproxDate As Date) As Date

Dim E As Integer
Dim M As Date

E = Weekday(AproxDate)
M = AproxDate + (13 - E)

NextFriday = M

End Function

然后您可以像在其他答案中一样调用该函数

答案 2 :(得分:0)

var d = new Date();
d.setDate(d.getDate() + (5+7 - d.getDay()) % 7);
document.write(d);

这是一个Javascript代码,它将在下一个星期五出现,这是唯一一个在星期五失败的情况。