网友问题:用VBA怎么显示当前月的第一个工作日?不考虑国假及周六周日不算工作日情况下。
附 件:
点击下载此附件
'Expression参数可以是任意日期,如果指定了该参数,则取其所在月份的第一个非周六、周日的日期
'如果省略该参数,则取当前系统日期所在月份的第一个非周六、周日的日期
'使用说明:获取当月第一个工作日函数(周六周末不算工作日情况下)
'使用方法:=FirstWorkDay() 或者 =FirstWorkDay([日期数据])
Function FirstWorkDay(Optional Expression As Variant) As Date
Dim dtm As Date
If IsDate(Expression) Then
dtm = CDate(Expression)
Else
dtm = Date
End If
dtm = DateSerial(Year(dtm), Month(dtm), 1)
Select Case Weekday(dtm, vbMonday)
Case 1 To 5
FirstWorkDay = dtm
Case 6
FirstWorkDay = dtm + 2
Case 7
FirstWorkDay = dtm + 1
End Select
End Function
'使用说明:获取当月最后工作日函数(周六周末不算工作日情况下)
'使用方法:=LastWorkDay() 或者 =LastWorkDay([日期数据])
Function LastWorkDay(Optional Expression As Variant) As Date
Dim dtm As Date
If IsDate(Expression) Then
dtm = CDate(Expression)
Else
dtm = Date
End If
dtm = DateSerial(Year(dtm), Month(dtm) + 1, 1) - 1
Select Case Weekday(dtm, vbMonday)
Case 1 To 5
LastWorkDay = dtm
Case 6
LastWorkDay = dtm - 1
Case 7
LastWorkDay = dtm - 2
End Select
End Function
|