2016-07-27 75 views
0

我需要帮助在VBA中编写一行代码来返回月末结束日期。对于月 - 终止日是这样的逻辑...月结束日期VBA

如果该月的最后一天结束的...

周日:当月然后最后一天是星期六以前。 (昨天)

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

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

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

周四:当月然后最后一天即将到来的周六(2天以后)

周五:当月然后最后一天是即将周六(1日以后)

我当前的代码如下。月结日期的格式如下。 2016年7月2日

Sub Macro1() 
With ActiveWorkbook.Connections("ABC Query").ODBCConnection 
    .BackgroundQuery = True 
    .CommandText = Array(_ 
    "exec [dbo].[getBSC_Monthly] @MonthEndDate = **where I need the line of code**") 
+0

的[Excel VBA中的给定日期和(给定的日期 - 12月)之间的比较]可能的复制(HTTP://计算器问题/ 34427121/excel-vba-comparison-between-given-date-and-given-date-2-months) – Comintern

+0

它可能有点重复,但我仍然对它感到困惑。努力尝试了解它 – Davey

回答

-1

工作日()函数会告诉你一周中的当前日期是什么(星期日= 1,星期一= 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)) 
+0

我在追随,这是完全意义上的。是的,可以写一个函数。它不一定需要是1表达式。我只是认为它可以完成,但绝对没有必要 – Davey

相关问题