大家好,我是捌贰春秋VBA。有些公司还在使用纸质考勤表,每个月都要重新设计考勤表,计算本月天数以及每天对应的星期。今天带大家用字典及日期函数等相关知识,制作动态考勤表,并自动标记周六日。

运行结果

功能介绍

1、选择年份和月份,获取本月天数(Day函数)。

2、数组第一行写入日期,数组第二行写入星期,Format(日期,"aaa")。

3、若数组第二行(即星期)为“六”或者”日“,则标记单元格底色为黄色,字体颜色为红色。

代码

Private Sub CommandButton1_Click()

On Error Resume Next

Dim arr(), i%, n%

With Range("A1")

.Resize(1, 33).Merge

.Value = "***公司 " & Me.月.Value & " 月考勤表"

.Font.Size = 22

End With

With Range("C2").Resize(2, 31)

.ClearContents

.Interior.ColorIndex = 0

.Font.Color = vbBlack

End With

n = Day(DateSerial(Me.年.Value, Me.月.Value + 1, 1) - 1)

ReDim arr(1 To 2, 1 To n)

For i = 1 To n

arr(1, i) = i

arr(2, i) = VBA.Mid(Format(Me.年.Value & "-" & Me.月.Value & "-" & arr(1, i), "aaa"), 2, 1)

'标记周六日

If arr(2, i) = "六" Or arr(2, i) = "日" Then

With Cells(2, 2 + i).Resize(2, 1)

.Interior.Color = vbYellow

.Font.Color = vbRed

End With

End If

Next i

Range("C2").Resize(2, n) = arr

End Sub