Vba 月末日期

Vba 月末日期,vba,excel,date,dynamic,Vba,Excel,Date,Dynamic,我需要帮助在VBA中编写一行代码来返回月末日期。月末日期的逻辑如下所示 如果一个月的最后一天结束于 星期日:那个月的最后一天就是上个星期六。(昨天) 星期一:那个月的最后一天就是上个星期六。(2天前) 星期二:那个月的最后一天就是上个星期六。(3天前) 星期三:那么该月的最后一天就是即将到来的星期六(未来3天) 星期四:那么该月的最后一天就是即将到来的星期六(未来两天) 星期五:那么该月的最后一天就是即将到来的星期六(未来1天) 我现在的代码如下。月末日期的格式如下所示2016-07-02 Su

我需要帮助在VBA中编写一行代码来返回月末日期。月末日期的逻辑如下所示

如果一个月的最后一天结束于

星期日:那个月的最后一天就是上个星期六。(昨天)

星期一:那个月的最后一天就是上个星期六。(2天前)

星期二:那个月的最后一天就是上个星期六。(3天前)

星期三:那么该月的最后一天就是即将到来的星期六(未来3天)

星期四:那么该月的最后一天就是即将到来的星期六(未来两天)

星期五:那么该月的最后一天就是即将到来的星期六(未来1天)

我现在的代码如下。月末日期的格式如下所示2016-07-02

Sub Macro1()
With ActiveWorkbook.Connections("ABC Query").ODBCConnection
    .BackgroundQuery = True
    .CommandText = Array( _
    "exec [dbo].[getBSC_Monthly] @MonthEndDate = **where I need the line of code**")
函数的作用是:告诉您一周中的当前日期(Sun=1,Mon=2,等等)。因此,如果Weekday()小于4,那么您需要的是Weekday()天之前的日期。如果WeekDay()>=3,那么您希望未来有7-WeekDay()天

Function MonthEnd(d)
    Dim actualmonthend, dow, ans
    actualmonthend = DateSerial(Year(d), Month(d) + 1, 1) - 1
    dow = Weekday(actualmonthend)
    If (dow < 4) Then
        ans = actualmonthend - dow
    Else
        ans = actualmonthend + (7 - dow)
    End If
    MonthEnd = ans
End Function

它的可能重复可能有点重复,但我还是被它弄糊涂了。努力去理解我所关注的,这是完全有道理的。是的,一个函数是可以写的。它不一定是一个表达式。我只是认为这是可以做到的,但绝对没有必要
DateSerial(Year(d), Month(d) + 1, 1) - 1 - Weekday(DateSerial(Year(d), Month(d) + 1, 1) - 1) + (7 * Abs(Weekday(DateSerial(Year(d), Month(d) + 1, 1) - 1) >= 4))