2016-07-27 115 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

相關問題