我正在处理代码,该代码确定今天是当月的第一个工作日。如果这是True,则运行一段代码。我的代码是:
If Date = LastDay - Day(LastDay) + 1 then
' My code is run Here
End if
问题:,它似乎指的是本月的最后一天,即5月29日。
答案 0 :(得分: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
答案 1 :(得分: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或更高版本),则此功能的一个版本允许您指定适用于您的语言环境的特定周末天数。
答案 2 :(得分:0)
这是一个更简单的解决方案,可以找到当月的第一个工作日,如果需要,您可以指定要在WORKDAY工作表函数的第3个参数中排除的假日:
Evaluate("Workday(EOMonth(Now(),-1),1)")
它会在上个月的最后一天之后找到第一个工作日,如果指定的话,不包括周末和公众假期。
这适用于2007年之后的Excel版本,否则您需要安装Analysis ToolPak加载项。
答案 3 :(得分:-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
您可能需要根据区域设置调整日期拼写。