2015-05-31 100 views
0

我在制定代碼,該代碼確定是否今天月的第一個工作日。如果這是真的,則運行一段代碼。我的代碼是:查找當月的第一個工作日

If Date = LastDay - Day(LastDay) + 1 then 

' My code is run Here 


End if 

問題:是,它似乎像它指的是這個月的最後一天,5月29

+1

你的問題是你的變量「LastDay」,但你不顯示你的代碼的變量獲取其價值? – pony2deer

+0

@ pony2deer沒有變量集。我正在運行代碼。所以這意味着我的語法方法是錯誤的。 – James

+0

但LastDay不是內置的VBA變量或函數。它需要在你的代碼 – pony2deer

回答

-1

這是獲得第一個頭腦簡單的方式本月工作日:

Sub fwday() 
    Dim d1 As Date, day1txt As String 
    d1 = DateSerial(Year(Date), Month(Date), 1) 
    day1txt = Format(d1, "dddd") 
    If day1txt = "Saturday" Then d1 = d1 + 2 
    If day1txt = "Sunday" Then d1 = d1 + 1 
    MsgBox d1 
End Sub 

您可能需要根據您的區域設置調整日期拼寫。

+0

@ gray'sstudent中定義的地方非常感謝你對這個可憐的問題致歉 – James

+2

不應該修改公式來調整假期嗎? –

+0

...以及其他日子呢,比如說day1txt =「星期五」?代碼看起來不完整,但我不會進一步擴展它。 – user1016274

0

這個函數會返回一個給定月份的第一個星期一的日期和時間:

Function fwday(Optional givenDate As Variant) As Date 
    ' returns the date of the first Monday in a given month and year 
    ' if called without argument the current date is used 
    Dim d As Date 

    If IsMissing(givenDate) Then givenDate = Date 

    d = DateSerial(Year(givenDate), Month(givenDate), 1) 
    d = d + ((9 - (d Mod 7)) Mod 7) 
    fwday = d 
End Function 
0

這裏是另一種方法,還包括可能在節假日補充:

Function IsFirstWorkday(DT As Date, ParamArray Holidays() As Variant) As Boolean 
    IsFirstWorkday = (WorksheetFunction.WorkDay(DT - Day(DT), 1, IIf(UBound(Holidays) = -1, 0, Holidays)) = DT) 
End Function 

的假日列表可以作爲數組傳遞,也可以作爲字符串傳遞。

例如,在聖誕節和新年的假期:

Sub foo() 
    If IsFirstWorkday(Date, #1/1/2016#, #12/25/2015#) Then 
     MsgBox "First Workday" 
    Else 
     MsgBox "Not First Workday" 
    End If 
End Sub 

如果您使用的是較新的Excel(我相信2010或更高版本)的版本,有這個功能,允許的版本您可以指定適用於您的語言環境的特定週末日期。

0

這裏有一個簡單的解決方案,如果需要找到當前月份,在那裏你可以指定節假日被排除在工作日工作表函數的第三個參數的第一個工作日:

Evaluate("Workday(EOMonth(Now(),-1),1)") 

它找到的第一個工作日在上個月的最後一天之後,如果指定,則不包括週末和公衆假期。

這適用於比2007年晚的Excel版本,否則需要安裝分析工具庫加載項。

相關問題