资源下载链接:职工考勤表(vba工作日自动填充批量打印)---源码在最后-互联网文档类资源-CSDN下载
功能使用说明:
1.找到开发工具----打开vb编辑器
2.此处代码均可根据自己需要更改
输入开始日期StartDay、结束日期EndDay,打印这期间工作日的表格,每个日期打印两遍,非工作日不打印
'目前仅支持2022年工作日判断,新年份需要手动更新--节假日表
3.运行代码,日期自动填充至单元格f1(可在代码中根据自身需要修改),并打印2月8号至2月28号期间工作日的考勤表,每个日期打印两遍
源码:
'输入开始日期StartDay、结束日期EndDay,打印这期间工作日的表格,每个日期打印两遍,非工作日不打印
'目前仅支持2022年工作日判断,新年份需要手动更新节假日表
Sub 工作日考勤表打印()
Dim TheDate, StartDay, EndDay As Date
Dim stn, isWeekDay, celname As String
stn = "sheet1" '工作表名称 ----可修改
celname = "f1" '填入日期的单元格名称----可修改 a2 -- f1 --局
StartDay = #2/8/2022# '#########输入开始日期,格式:月/日/年###########
EndDay = #2/28/2022# '#########输入结束日期,格式:月/日/年###########
TheDate = DateSerial(Year(StartDay), Month(StartDay), Day(StartDay)) '获取开始日期
xunhuan:
While TheDate <= EndDay '循环,直到跳出结束日期
isWeekDay = workDay(TheDate) '调用方法---判断是否是工作日
If isWeekDay = "休" Then '是工作日则不打印----继续下一次循环
Debug.Print "不打印!" & TheDate
TheDate = TheDate + 1
GoTo xunhuan
End If
Sheets(stn).Range(celname) = Format(TheDate, "yyyy年mm月dd日") '设置单元格celname的内容为日期
Sheets(stn).PrintOut '同一日期第一次打印---上午
Debug.Print "第一次打印---上午" & TheDate
Sheets(stn).PrintOut '同一日期第二次打印---下午
Debug.Print "第二次打印---下午" & TheDate
TheDate = TheDate + 1 '当前日期的下一天
Wend
End Sub
'判断指定日期是否是工作日,是返回"○",不是返回 "休"
'判断方法----(1)先判断是否是周一至周五(2)遍历节假日表,查询是否是特殊日期
Function workDay(rq)
Dim cel As Range
If Weekday(rq) = 1 Or Weekday(rq) = 7 Then
temp = "休"
For Each cel In Range("节假日表!B2:B17")
a = DateDiff("d", cel.Value, rq)
If a = 0 Then
temp = "○"
Exit For
End If
Next
Else
temp = "○"
For Each cel In Range("节假日表!A2:A37")
a = DateDiff("d", cel.Value, rq)
If a = 0 Then
temp = "休"
Exit For
End If
Next
End If
workDay = temp
End Function
附表格: