以前做过考勤管理,以天为单位进行设置,根据不同的企业公司上班需求,严格来说,必须精细到分钟,这样就给我们提出了新的任务。
本节介绍一个简单的考勤应用模式,实现时间打卡,精确到分钟。
上图为示例图片,也是主操作页和考勤管理主页。
可以很清楚地看到员工信息一考勤记录,其实现起来很简单,直接在考勤日期单元格单击鼠标会自动弹出考勤设置页。
下图为本表后半部分内容,主要是考勤总结计算。
单击考勤表某个人的某一天单元格自动弹出下面对话框,进行考勤打卡。
员工信息会自动显示出来,如果不正确就不用打卡。
下面是打卡日期,出勤类型,这里多了两个类型,加班和迟到。此两项和下面的上班时间和下班时间有一定的数据计算。
可以设定上班时间,和下班时间,如果超出相应的工作时间就会提示选择。
而且分别进行了一些时间计算,相对比较复杂一点。
而且,此示例还增加了考勤导出功能,可以实现保存到一个新表当中备份。
所以还是有一定的使用功能。
No.2下面看一下实现代码
Private Sub CommandButton1_Click()
Dim xObj As Object
For Each xObj In Me.Controls
If TypeName(xObj) = "OptionButton" Then
If xObj.Value Then
If VBA.Len(getCstr(xObj)) = 0 Then MsgBox "打卡失败: " & xObj.Caption, vbInformation, "提示": Exit Sub
If checkOut(getTimeHours) Then '检测如果迟到
If xObj.Caption <> strK(6) Then MsgBox "没有选择正确!" & strK(6): Exit Sub
ActiveSheet.Cells(ir, ic).Value = VBA.Right(strK(6), 1)
MsgBox "打卡成功: " & VBA.vbCrLf & strK(6), vbInformation, "提示"
Else '没有迟到
If checkOn(getTimeHours) Then '检测如果加班
If xObj.Caption <> strK(5) Then MsgBox "没有选择正确!" & strK(5): Exit Sub
ActiveSheet.Cells(ir, ic).Value = VBA.Right(strK(5), 1)
MsgBox "打卡成功: " & VBA.vbCrLf & strK(5), vbInformation, "提示"
Else '不加班
ActiveSheet.Cells(ir, ic).Value = getCstr(xObj)
MsgBox "打卡成功: " & VBA.vbCrLf & xObj.Caption, vbInformation, "提示"
End If
End If
ThisWorkbook.Save
Unload Me
End If
End If
Next xObj
End Sub
信息初始化
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim R As Range, cell As Range
Set R = ActiveSheet.Range("B2")
ClearCen R '清除数据
Dim yArr, Ci As Long, Ri As Long
yArr = ThisWorkbook.Worksheets("信息").UsedRange
Ci = UBound(yArr, 2)
Ri = UBound(yArr, 1)
Set cell = R.Resize(Ri, Ci)
With cell
.Value = yArr
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Borders.LineStyle = 2
.Borders.Color = RGB(189, 189, 235)
End With
Application.ScreenUpdating = True
End Sub
考勤管理一般有专业的打卡机进行处理,可以导出xls文件,不过某些公司内部还是需要自己进行建表计算,所以这方面的应用也是十分广泛。
欢迎关注、收藏
---END---
,