APP下载

基于Excel的员工管理系统设计

2019-09-10杨波

中国电气工程学报 2019年7期
关键词:控件考勤代码

杨波

摘要:基于Excel设计并开发简易员工管理系统,通过VBA编写程序代码,以实现员工增加、修改和考勤管理等功能,帮助简化员工管理工作,提高员工管理工作效率和数据可靠性。

关键字:员工管理、管理系统、VBA编程

前言:

随着公司员工数量的增加,员工信息和考勤登记工作量随之增加,依靠传统的手工登记方式工作效率低,而且数据容易出错,考勤数据也存在人为修改,造成数据可靠性不高的缺陷。如果购买较大的人事管理系统则需要支出较高的软件购买费用和后期服务费,而且很多功能并不能得带充分的利用,这就造成了资源浪费,同时庞大的软件虽然功能完善,但是对于操作人员的素质要求也更高,这就需要对工作人员进行培训,产生额外的支出,如果人员流动又会造成不必要的麻烦。

因此需要设计并开发一款功能适当、操作简单又能很好的完成员工管理工作的系统,Excel加VBA编程就是一种很好的选择。借助强大的VBA编程语言和Excel优秀的表格管理和数据处理能力,完全能够实现员工管理系统设计开发。

一、数据表格和主界面的设计

1.系统主界面设计。新建工作表命名为“主界面”,通过Excel插入菜单绘制主界面,如图1.1员工管理系统主界面所示,后期编写VBA代码,将各功能模块添加至相应的按钮。

2.数据管理表格的设计。新建“员工花名册”、“考勤表”和“请假登记表”,根据公司员工管理需要编辑各表格的内容及格式。

可以将数据表隐藏只保留主界面表,或对数据表添加保护,以保证数据不被操作人员修改,确保数据的准确度。

二、VBA编程

1.窗体及代码设计

(1)员工资料管理窗体及代码设计。根据数据管理表格格式编写相应代码以实现员工信息增加和修改功能。

l 对于表格中必填的用户数据项目,例如员工姓名、身份证号等重要数据,可用如下关键代码实现:

Private Sub cmdSave_Click()

If txtName.Value = "" Then '判断姓名框是否为空

MsgBox "请输入员工姓名!", , "提示" '提示信息

txtName.SetFocus '设置焦点到姓名框

Exit Sub '结束子过程

Add '调用添加数据子过程

l 对于数据内容有特殊格式要求的项目,如出生年月和入职、离职时间等,可通过如下关键代码实现:

If Not IsDate(txtEnd.Value) Then '判断是否为日期格式

MsgBox "请输入正确的离职时间!", , "提示" '提示信息

txtEnd.SelStart = 0 '设置文本框的选取起始位置

txtEnd.SelLength = Len(txtEnd.Value) '设置文本框选取文字的长度

Cancel = True '焦点仍停留在该控件上

End If

如果是身份证号码或是职工工号等,对数据类型和位数有严格要求的,则可以通过判断用户输入的数据类型和位数,检测输入数据是否符合要求。

l 对于数据内容是固定的种类,用户只需要根据实际信息选择相应的内容即可的,则可以通过复合框功能实现,关键代码如下:

cbxEdu.AddItem "博士" '添加项目到“学历”复合框

cbxEdu.AddItem "硕士"

cbxEdu.AddItem "本科"

cbxEdu.AddItem "专科"

l 由于员工信息修改和新增的数据表内容是相同的,所以信息修改界面不需要单独设计窗体,只需要在员工新增窗体中添加判断代码,则可以实现信息的修改,关键代码如下:

If strStatus = "查询" Then '判断是否为“查询”状态

intRow = intCurrentRow '设置当前行为查询到的行数

Else

Sheets("员工花名册").Range("A3").Select '选择A3单元格

intRow = ActiveCell.CurrentRegion.Rows.Count '获取员工花名册已有数据行数

strBh = Cells(intRow, 1) '获得最后编号

If strBh = "" Then '判断编号是否为空

strBh = "Y0001" '若为空则添加编号“Y0001”

Else

strBh = "Y" & Format(Right(strBh, 4) + 1, "0000") '按规则产生新的编号

intRow = intRow + 1 'intRow增加1,指向表格新的一行

End If

Cells(intRow, 1) = strBh '将用户窗体上的数据填充到“员工花名册”的新行上

End If

其中“txtName”、“txtEnd”、“cbxEdu”為窗体设计中该控件的名称,可以根据实际需要定义不同的控件名称,借助示例中的代码进行变换,以实现对数据的控制。

(2)员工考勤窗体及代码设计。此功能区分为考勤签到和请假登记两个功能模块,可实现员工考勤管理。

l 考勤签到模块主要有时间显示控件和员工信息读取控件。时间显示控件,可以用“frmCheck.lblTime.caption = Format(Now, "hh:mm:ss")”代码实现;而信息读取控件可以采用下拉列表的方式实现,通过关键代码“cbxName.RowSource = "考勤表!b5:b" & intRow”获取考勤表数据,考勤表中的员工信息则可以通过与花名册数据核对的方式进行自动同步,关键代码如下:

For i = intStart To intStart + intEnd '将员工花名册中的数据插入考勤表中

With Sheets("考勤表")

.Cells(i + 2, 1).EntireRow.Insert '插入一个空行

.Cells(i + 2, 1) = Sheets("员工花名册").Cells(i, 1).Value '将员工花名中册的序号填写到考勤表

.Cells(i + 2, 2) = Sheets("员工花名册").Cells(i, 2).Value '将员工花名册的姓名填写到考勤表

End With

Next

编写代码将当前签到时间和上班时间进行核对,在规定时间前完成签到的记为正常上班,未按时完成签到的则记为迟到或旷工。

l 请假登记模块主要控制请假的开始和结束日期,做到数据有效且合理,例如请假结束日期必须在开始日期之后。并且请假数据和签到数据不冲突,即员工请假登记后他的考勤记为请假,而不是迟到或旷工。

2.模块代码设计。使用不同的模块能将相关的过程进行聚合,便于代码的管理,为不同模块定制不同的行为,使代码的可维护性和可重用性大大提高。

(1)员工信息管理模块的设计。该模块主要实现主界面中员工资料区各按钮对应的弹窗控制,以及通过对“frmNew”窗体的控制实现员工信息修改。当用户在窗体中输入相关数据之后,通过该模块可以根据规则对用户操作进行弹窗提示,并将输入数据进行对应的赋值。

(2)員工考勤管理模块的设计。该模块主要控制员工的签到(frmCheck)和请假(frmRegister)两个窗体,关键代码如下:

Public Sub 考勤签到()

frmCheck.Show '显示窗体

End Sub

同时,该模块还需要借助API函数和操作系统的“user32.dll”控件创建(销毁)计时器,用于签到模块时间控件的调用。

三、结语

系统整体功能简单,基本能够实现公司员工的信息管理和考勤记录工作,能够保证数据的准确有效,同时系统的界面简洁、操作简单,对工作人员的技术要求度不高。后期可以考虑对系统进行扩展,采用工作证或身份证加证件阅读器的模式,员工刷卡即可完成签到,减少人员操作以降低人为因素造成的数据不准确,提高工作效率。

参考文献:

[1]刘琼.Excel VBA案例实战从入门到精通[M].北京:机械工业出版社,2018.

[2]罗刚君.Excel VBA程序开发自学宝典[M].北京:电子工业出版社,2014.

猜你喜欢

控件考勤代码
使用“填表单”微信小程序 统计信息很方便
基于.net的用户定义验证控件的应用分析
三级甲等医院应用PDCA循环提升考勤管理的创新
浅议如何做好地铁公司考勤工作
神秘的代码
基于校园卡的学生考勤系统研究
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
近期连续上涨7天以上的股
木卫四:挣扎吧!在考勤夹缝终生存的汉子们!