《EXCEL VBA行政与人力资源管理应用案例详解 第8章.pdf》由会员分享,可在线阅读,更多相关《EXCEL VBA行政与人力资源管理应用案例详解 第8章.pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 C H A P T E R 劳动合同管理模块的设计 8-1 劳动合同管理模块的总体设计 8-2 职工合同管理窗体结构设计 8-3 职工合同管理窗体程序代码设计 8-4 职工劳动合同管理子模块应用示例 8-5 为合同管理自定义菜单命令和自定义命令按钮指定宏 行政与人力资源管理应用案例详解 职工劳动合同管理是企业人力资源管理的一项重要内容。在人才流动性日益增强的今天,对职工的劳动合同进行管理,及时掌握职工的劳动合同期限和到期情况,以便及时做出劳动合同的续签工作和应聘人员转正工作,是非常重要的。劳动合同管理模块,主要功能是对职工和应聘人员的各种劳动合同(包括正式劳动合同和新聘员工的试用合同)进行统
2、一管理。本章将详细介绍劳动合同管理模块的设计方法和步骤。8-1 劳动合同管理模块的总体设计 本章介绍的劳动合同管理模块包括一个子模块,即“职工合同管理”。在这个子模块中,将正式职工的正式劳动合同和新聘员工的试用合同放在一起进行统一管理。因此,劳动合同管理模块或“职工合同管理”子模块是以一个名为“职工合同信息”的数据表为基础的。“职工合同信息”数据表所包含的字段信息如表 8-1 所示。表 8-1 “职工合同信息”数据表字段 字段名称 字段类型 字段大小 是否允许为空 说 明 职工编号 文本 5 否 来源于“职工基本信息”数据表 姓名 文本 10 否 来源于“职工基本信息”数据表 性别 文本 1
3、否 来源于“职工基本信息”数据表 所属部门 文本 10 否 来源于“职工基本信息”数据表 合同编号 文本 13 否 由职工编号和签订日期数字组成 合同类型 文本 2 否 合同起始日 日期 否 合同终止日 日期 否 合同期限 数字 单精度型 否 试用期 数字 整型 否 备注 文本 50 是 “职工合同信息”数据表由系统自动创建,具体程序代码可参阅第 2 章的有关内容。“职工合同管理”子模块由一个“职工合同管理”主窗体、一个“按钮查询”子窗体和一个“职工信息输入”子窗体组成,其中“按钮查询”子窗体和“职工信息输入”子窗体在前面的章节中已经作了介绍,下面主要介绍“职工合同管理”主窗体的设计。8-2
4、职工合同管理窗体结构设计“职工合同管理”窗体的结构如图 8-1 所示,它与第 7 章介绍的一些窗体的结构大同小异。“职工合同管理”窗体由 1 个用户窗体、6 个框架、1 个复合框、13 个标签、8 个文本框、2 个 DTPicker 控件、1 个 Spreadsheet 控件和 11 个命令按钮组成。用户窗体及各个控件的功能及属性设置说明如下。314 劳动合同管理模块的设计 8 图 8-1 “职工合同管理”主窗体结构(1)用户窗体:名称属性和 Caption 属性均设置为“职工合同管理”。(2)6 个框架:它们用于将不同功能的控件组合在一起。其中 4 个框架的 Caption 属性分别设置为“
5、合同信息”、“编辑记录”、“查询浏览记录”和“职工合同信息列表”;2个框架的 Caption 属性都设置为空值,Height 属性设置为 3,并分别放置于标题为“合同信息”和“查询浏览记录”的框架内,用于将不同功能的控件分隔成组。(3)标题为“合同信息”框架内的控件:在此框架内,有 13 个标签、8 个文本框、1 个复合框和 2 个 DTPicker 控件,这些控件用于显示或输入职工劳动合同信息。13 个标签分别用于对 8 个文本框、1 个复合框和 2 个 DTPicker 控件的功能进行说明,其 Caption 属性的设置情况见如 8-1 所示。8 个文本框、1 个复合框和 2 个 DTPi
6、cker 控件用于输入或显示职工劳动合同信息,其功能说明及属性设置如表 8-2 所示。表 8-2 职工劳动合同信息数据控件的功能说明和属性设置 控件类型 控件名称(名称属性)控件功能 文本框 职工编号 显示或输入职工编号 文本框 姓名 显示或输入职工姓名 文本框 性别 显示或输入职工性别 文本框 所属部门 显示或输入职工所属部门 文本框 合同编号 显示或输入合同编号 复合框 合同类型 显示或输入合同类型 DTPicker 合同起始日 显示或输入合同起始日 DTPicker 合同终止日 显示或输入合同终止日 文本框 合同期限 显示或输入合同期限 文本框 试用期 显示或输入试用期 文本框 备注 显
7、示或输入备注文字 315 行政与人力资源管理应用案例详解(4)用户窗体上的 11 个命令按钮:分别完成保存、修改、查询浏览记录等功能,其功能说明和属性设置如表 8-3 所示。表 8-3 命令按钮的功能说明和属性设置 名称属性 Caption 属性 功 能 输入新数据 输入新数据 打开“职工信息输入”子窗体,准备输入新职工的劳动合同信息 保存 保存 保存劳动合同信息记录 更新 更新 更新劳动合同信息记录 删除 删除 删除劳动合同信息记录 查询 查询 启动一个查询窗口,查询劳动合同信息记录 重置窗口 重置窗口 刷新窗口 第一条 第一条 浏览第一条记录 下一条 下一条 浏览下一条记录 上一条 上一条
8、 浏览上一条记录 最末条 最末条 浏览最末条记录 退出 退出系统 关闭“职工合同管理”窗体(5)在 Spreadsheet1 控件的单元格 A1:K1 中分别输入“职工编号”、“职工姓名”、“性别”、“所属部门”、“合同编号”、“合同类型”、“合同起始日期”、“合同终止日期”、“合同期限(年)”、“试用期(天)”和“备注”,加粗字体,并居中显示。8-3 职工合同管理窗体程序代码设计 劳动合同管理,就是以“人事管理.mdb”数据库中的“职工合同信息”数据表为基础,通过“职工合同管理”窗体及有关控件,完成在职职工和应聘人员的劳动合同资料的添加、修改、删除、显示等功能。下面介绍“职工合同管理”主窗体
9、及有关控件的事件程序代码。1定义模块级变量 首先定义下面的模块级变量,它们放在窗体对象程序代码窗口的顶部:Dim cnn As ADODB.Connection Dim rsContract As ADODB.Recordset 2为用户窗体设计 Initialize 事件程序 为用户窗体设置 Initialize 事件,以便在启动“职工合同管理”窗体时,系统自动建立与数据库的连接,对有关的数据表进行查询,并设置某些控件的属性。“职工合同管理”窗体的 Initialize 事件程序代码如下:Private Sub UserForm_Initialize()mySearchShow=False
10、建立与人事管理数据库的连接 Set cnn=New ADODB.Connection With cnn .Provider=microsoft.jet.oledb.4.0 .Open ThisWorkbook.Path&人事管理.mdb End With 316 劳动合同管理模块的设计 8 Call 合同信息查询 Call 显示合同信息记录清单(rsContract)With 合同类型 .AddItem 正式 .AddItem 试用 End With 职工编号.Enabled=False:姓名.Enabled=False:性别.Enabled=False 所属部门.Enabled=False:
11、合同起始日.Value=Date:合同终止日.Value=Date 输入新数据.SetFocus End Sub 3为有关控件设计 Change 事件程序 为了防止在有关的文本框和复合框中输入过长的数据,引起保存数据出现错误,应当对这些控件设置 Change 事件,以保证输入数据的长度不超过规定允许的长度。一些控件的 Change 事件程序代码如下:Private Sub 合同编号_Change()Call TextBoxDataLength(cnn,职工合同信息,合同编号,合同编号)End Sub Private Sub 合同类型_Change()Call ComboBoxDataLengt
12、h(cnn,职工合同信息,合同类型,合同类型)If 合同类型.Value=正式 Then 试用期.Value=0 End Sub Private Sub 备注_Change()Call TextBoxDataLength(cnn,职工合同信息,备注,备注)End Sub 4为“合同期限”和“试用期”2 个文本框设计 KeyPress 事件程序 为“合同期限”和“试用期”2 个文本框设计 KeyPress 事件程序,以控制用户只能输入输入 09 之间的数字和小数点,程序代码分别如下:Private Sub 合同期限_KeyPress(ByVal KeyAscii As MSForms.Retur
13、nInteger)If(KeyAscii 57)And KeyAscii 46 Then KeyAscii=0:合同期限.SetFocus End If End Sub Private Sub 试用期_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)If(KeyAscii 57)And KeyAscii 46 Then KeyAscii=0:试用期.SetFocus End If End Sub 5为【输入新数据】按钮设计 Click 事件程序 单击【输入新数据】按钮,系统将打开“职工信息输入”子窗体,以方便用户查找输入某职工的基本信息,同时清
14、空文本框中的合同信息数据,准备输入新的合同信息资料。【输入新数据】按钮 Click 事件的程序代码如下:Private Sub 输入新数据_Click()On Error Resume Next Call 清除合同窗口数据 职工信息输入.Show 职工编号.Value=Format(职工信息输入.Spreadsheet1.ActiveCell.Value,00000)姓名.Value=职工信息输入.Spreadsheet1.ActiveCell.Offset(0,1).Value 性别.Value=职工信息输入.Spreadsheet1.ActiveCell.Offset(0,2).Value
15、 317 行政与人力资源管理应用案例详解 所属部门.Value=职工信息输入.Spreadsheet1.ActiveCell.Offset(0,3).Value 合同起始日.Value=Date:合同终止日.Value=Date:合同编号.SetFocus Unload 职工信息输入 End Sub 6为【保存】按钮设计 Click 事件程序 单击【保存】按钮,系统就将职工劳动合同信息记录保存到“职工合同信息”数据表中。在保存数据之前,系统将检查一些数据控件是否已经输入了数据,数据表中是否已经存在了职工编号相同、合同编号相同的记录。【保存】按钮 Click 事件的程序代码如下:Private
16、Sub 保存_Click()On Error GoTo hhh mySearchShow=False 判断有关的数据是否为空 If ComboBoxDataIsBlank(合同类型,合同类型)=True Then Exit Sub If IsNull(合同起始日.Value)Then MsgBox 合同起始日不能为空!,vbCritical,警告 合同起始日.Value=Date:Exit Sub End If If IsNull(合同终止日.Value)Then MsgBox 合同终止日不能为空!,vbCritical,警告 合同终止日.Value=Date:Exit Sub End If
17、If TextBoxDataIsBlank(合同期限,合同期限)=True Then Exit Sub If TextBoxDataIsBlank(试用期,试用期)=True Then Exit Sub 判断数据库中是否已经存在了某个职工的合同信息 Dim mysql As String Dim rsCheck As ADODB.Recordset Set rsCheck=New ADODB.Recordset mysql=select*from 职工合同信息 where 职工编号=&职工编号.Value&_&and 合同编号=&合同编号.Value&rsCheck.Open mysql,cn
18、n,adOpenKeyset,adLockOptimistic If rsCheck.RecordCount 0 Then MsgBox 数据库中已经存在了下面的合同记录:&vbCrLf&vbCrLf _&职工编号:&职工编号.Value&vbCrLf _&姓名:&姓名.Value&vbCrLf _&合同编号:&合同编号.Value&vbCrLf&vbCrLf&vbCrLf _&请重新选择职工或输入新的合同编号!,vbCritical,合同重复错误!Set rsCheck=Nothing Exit Sub End If Call 合同信息查询 rsContract.AddNew Call 保存
19、合同信息数据(rsContract)Call 合同信息查询 Call 显示合同信息(rsContract)Call 显示合同信息记录清单(rsContract)Exit Sub hhh:MsgBox 保存数据出现错误!&vbCrLf&vbCrLf _&错误为:&Err.Description,vbCritical,保存错误 End Sub 318 劳动合同管理模块的设计 8 7为【更新】按钮设计 Click 事件程序 如果用户需要更新某个职工的某条劳动合同信息记录,应当首先将该条记录查询出来,然后单击【更新】按钮。【更新】按钮的 Click 事件程序代码如下:Private Sub 更新_Cl
20、ick()Dim res res=MsgBox(准备更新当前职工的合同资料数据!真要更新吗?,_ vbYesNo+vbDefaultButton2+vbQuestion,更新合同资料)If res=vbNo Then Exit Sub If mySearchShow=False Then Call 保存合同信息数据(rsContract)Call 合同信息查询 Call 显示合同信息记录清单(rsContract)ElseIf mySearchShow=True Then Call 保存合同信息数据(rsSearch)Call 显示合同信息记录清单(rsSearch)End If End Su
21、b 8为【删除】按钮设计 Click 事件程序 如果用户要删除某条劳动合同信息记录,应当首先将劳动合同信息记录查询出来,然后单击【删除】按钮。【删除】按钮的 Click 事件程序代码如下:Private Sub 删除_Click()On Error Resume Next Dim res res=MsgBox(准备删除当前职工的合同资料数据!真要删除吗?,_ vbYesNo+vbDefaultButton2+vbQuestion,删除合同资料)If res=vbNo Then Exit Sub Dim mysql As String Dim rsDelete As ADODB.Recordse
22、t Set rsDelete=New ADODB.Recordset mysql=delete*from 职工合同信息 where 职工编号=&职工编号.Value&_&and 合同编号=&合同编号.Value&rsDelete.Open mysql,cnn,adOpenKeyset,adLockOptimistic Set rsDelete=Nothing Call 清除合同窗口数据 Call 合同信息查询 Call 显示合同信息(rsContract)Spreadsheet1.ActiveSheet.Unprotect Spreadsheet1.Range(A2:Z1000).ClearC
23、ontents Spreadsheet1.ActiveSheet.Protect Call 显示合同信息记录清单(rsContract)End Sub 9为【查询】按钮设计 Click 事件程序 单击【查询】按钮,系统将打开“按钮查询”子窗体,用户可以设置任意查询条件进行查询。【查询】按钮的 Click 事件程序代码如下:Private Sub 查询_Click()On Error Resume Next Call 清除合同窗口数据 按钮查询.Show End Sub 319 行政与人力资源管理应用案例详解10为【重置窗口】按钮设计 Click 事件程序 单击【重置窗口】按钮,系统将对数据表进
24、行重新查询,并刷新窗体数据显示。【重置窗口】按钮的 Click 事件程序代码如下:Private Sub 重置窗口_Click()mySearchShow=False Call 合同信息查询 Call 显示合同信息(rsContract)Call 显示合同信息记录清单(rsContract)Spreadsheet1.Range(A2).Select End Sub 11为 4 个浏览按钮【第一条】、【下一条】、【上一条】和【最末条】按钮设计 Click事件程序 单击 4 个浏览按钮【第一条】、【下一条】、【上一条】和【最末条】按钮,可以依次查看每个劳动合同信息记录。这 4 个按钮的 Click
25、 事件程序与前面介绍的有关窗体上的 4 个浏览按钮基本相同,所不同的是调用的子程序不同。这里调用的子程序的语句分别为:Call 显示合同信息(rsContract)Call 显示合同信息(rsSearch)12为【退出系统】按钮设计 Click 事件程序 单击【退出系统】按钮,就关闭职工合同管理窗体。【退出系统】按钮的 Click 事件程序代码如下:Private Sub 退出系统_Click()End End Sub 13为 Spreadsheet1 控件设计 Click 事件程序 为 Spreadsheet1 控件设置 Click 事件,可以在单击控件内某行的任一单元格时,就将该行职工的合
26、同信息数据显示在各个控件中。Spreadsheet1控件的Click事件程序代码如下:Private Sub Spreadsheet1_Click()On Error GoTo hhh If mySearchShow=False Then rsContract.AbsolutePosition=Spreadsheet1.ActiveCell.Row-1 Call 显示合同信息(rsContract)ElseIf mySearchShow=True Then rsSearch.AbsolutePosition=Spreadsheet1.ActiveCell.Row-1 Call 显示合同信息(r
27、sSearch)End If Exit Sub hhh:Call 清除合同窗口数据 End Sub 14几个调用的子程序 为了简化程序代码,某些控件的事件程序调用了几个子程序,这几个子程序的程序代码如下:(1)“合同信息查询”子程序 Public Sub 合同信息查询()Dim mysql As String Set rsContract=New ADODB.Recordset 320 劳动合同管理模块的设计 8 mysql=select*from 职工合同信息 order by 职工编号 rsContract.Open mysql,cnn,adOpenKeyset,adLockOptimis
28、tic End Sub(2)“保存合同信息数据”子程序 Public Sub 保存合同信息数据(myRs As ADODB.Recordset)myRs.Fields(职工编号)=职工编号.Value myRs.Fields(姓名)=姓名.Value myRs.Fields(性别)=性别.Value myRs.Fields(所属部门)=所属部门.Value myRs.Fields(合同编号)=合同编号.Value myRs.Fields(合同类型)=合同类型.Value myRs.Fields(合同起始日)=合同起始日.Value myRs.Fields(合同终止日)=合同终止日.Value
29、myRs.Fields(合同期限)=合同期限.Value myRs.Fields(试用期)=试用期.Value If 备注.Value=Then myRs.Fields(备注)=Null Else myRs.Fields(备注)=备注.Value End If myRs.Update End Sub(3)“显示合同信息”子程序 Public Sub 显示合同信息(myRs)职工编号.Value=myRs.Fields(职工编号)姓名.Value=myRs.Fields(姓名)性别.Value=myRs.Fields(性别)所属部门.Value=myRs.Fields(所属部门)合同编号.Val
30、ue=myRs.Fields(合同编号)合同类型.Value=myRs.Fields(合同类型)合同起始日.Value=myRs.Fields(合同起始日)合同终止日.Value=myRs.Fields(合同终止日)合同期限.Value=myRs.Fields(合同期限)试用期.Value=myRs.Fields(试用期)If IsNull(myRs.Fields(备注)Then 备注.Value=Else 备注.Value=myRs.Fields(备注)End If End Sub(4)“显示合同信息记录清单”子程序 Public Sub 显示合同信息记录清单(myRs As ADODB.R
31、ecordset)On Error Resume Next Spreadsheet1.Application.ActiveSheet.Unprotect Spreadsheet1.Range(A2:BB10000).ClearContents myRs.MoveFirst For i=1 To myRs.RecordCount For j=0 To myRs.Fields.Count-1 If j=6 Or j=7 Then Spreadsheet1.Cells(1+i,j+1)=Format(myRs.Fields(j),yyyy-mm-dd)Else 321 行政与人力资源管理应用案例详解
32、 If IsNull(myRs.Fields(j)Then Spreadsheet1.Cells(1+i,j+1)=Else Spreadsheet1.Cells(1+i,j+1)=myRs.Fields(j)End If End If Next j myRs.MoveNext Next i myRs.MoveFirst Spreadsheet1.Cells.Font.Size=10 Spreadsheet1.Rows.AutoFit Spreadsheet1.Columns.AutoFit Spreadsheet1.Columns(A:A).NumberFormat=00000 Spread
33、sheet1.Columns(A:A).HorizontalAlignment=xlLeft Spreadsheet1.Columns(E:E).NumberFormat=00000 Spreadsheet1.Columns(E:E).HorizontalAlignment=xlLeft Spreadsheet1.Columns(I:I).HorizontalAlignment=xlCenter Spreadsheet1.Application.ActiveSheet.Protect End Sub(5)“清除合同窗口数据”子程序 Public Sub 清除合同窗口数据()职工编号.Value
34、=:姓名.Value=:性别.Value=:所属部门.Value=合同编号.Value=:合同类型.Value=:合同起始日.Value=:合同终止日.Value=合同期限.Value=:试用期.Value=:备注.Value=End Sub 8-4 职工劳动合同管理子模块应用示例 执行自定义菜单【合同管理】中的【职工合同管理】命令,或单击【合同保险基金管理】自定义工具栏中的【职工合同管理】命令按钮,打开“职工合同管理”窗体,如图 8-2所示,用户就可以通过此窗体输入、浏览编辑、查询内部劳动合同信息。图 8-2 职工劳动合同管理窗口 322 劳动合同管理模块的设计 8 首先单击【输入信数据】按
35、钮,打开【职工信息输入】子窗体,选择要输入劳动合同信息的职工,获取职工的基本信息数据,如图 8-3 所示。图 8-3 获取职工基本信息 然后,在劳动合同信息数据控件中输入劳动合同信息数据,单击【保存】按钮,将该职工的劳动合同信息进行保存,如图 8-4 所示。图 8-4 保存合同信息数据如果在“职工合同信息”数据表中已经存在了某个职工的合同信息,而在窗体上输入的职工编号和合同编号与已经存在的职工编号和合同编号相同,系统就会拒绝保存数据,并要求用户输入新的职工或新的合同编号。8-5 为合同管理自定义菜单命令和自定义命令按钮指定宏 为了在执行自定义菜单【合同管理】中的【职工合同管理】菜单命令,或单击【合同 323 行政与人力资源管理应用案例详解保险基金管理】自定义工具栏中的【职工合同管理】命令按钮时,打开职工合同管理窗体,需要为菜单命令和自定义命令按钮指定宏,宏代码如下所示,它保存在一个名为“职工合同管理程序”的标准模块中:Public Sub 职工合同管理窗口()mySearchItems=合同管理 职工合同管理.Show End Sub 324