我在制定代碼,該代碼確定是否今天是月的第一個工作日。如果這是真的,則運行一段代碼。我的代碼是:查找當月的第一個工作日
If Date = LastDay - Day(LastDay) + 1 then
' My code is run Here
End if
問題:是,它似乎像它指的是這個月的最後一天,5月29
我在制定代碼,該代碼確定是否今天是月的第一個工作日。如果這是真的,則運行一段代碼。我的代碼是:查找當月的第一個工作日
If Date = LastDay - Day(LastDay) + 1 then
' My code is run Here
End if
問題:是,它似乎像它指的是這個月的最後一天,5月29
這是獲得第一個頭腦簡單的方式本月工作日:
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
您可能需要根據您的區域設置調整日期拼寫。
@ gray'sstudent中定義的地方非常感謝你對這個可憐的問題致歉 – James
不應該修改公式來調整假期嗎? –
...以及其他日子呢,比如說day1txt =「星期五」?代碼看起來不完整,但我不會進一步擴展它。 – user1016274
這個函數會返回一個給定月份的第一個星期一的日期和時間:
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
這裏是另一種方法,還包括可能在節假日補充:
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或更高版本)的版本,有這個功能,允許的版本您可以指定適用於您的語言環境的特定週末日期。
這裏有一個簡單的解決方案,如果需要找到當前月份,在那裏你可以指定節假日被排除在工作日工作表函數的第三個參數的第一個工作日:
Evaluate("Workday(EOMonth(Now(),-1),1)")
它找到的第一個工作日在上個月的最後一天之後,如果指定,則不包括週末和公衆假期。
這適用於比2007年晚的Excel版本,否則需要安裝分析工具庫加載項。
你的問題是你的變量「LastDay」,但你不顯示你的代碼的變量獲取其價值? – pony2deer
@ pony2deer沒有變量集。我正在運行代碼。所以這意味着我的語法方法是錯誤的。 – James
但LastDay不是內置的VBA變量或函數。它需要在你的代碼 – pony2deer