EXCEL VBA行政与人力资源管理应用案例详解 第3章.pdf
C H A P T E R 系统管理模块的设计 3-1 单位信息子模块 3-2 修改登录用户名子模块 3-3 修改用户登录密码子模块 3-4 设置系统参数子模块 3-5 系统提醒子模块 3-6 数据库维护子模块 3-7 为【系统管理】自定义菜单项和自定义工具栏命令按钮指定宏 行政与人力资源管理应用案例详解 系统管理模块是人力资源管理系统的一个基础模块,包括“单位信息”、“修改用户名”、“修改密码”、“设置系统参数”、“系统提醒”和“数据库维护”等基本子模块,分别用于显示单位信息、修改登录用户名、修改登录密码、设置系统提醒参数、显示系统提醒信息、以及对数据库中各个数据表的文本型字段长度进行修改。读者还可以根据企业的具体情况,增加或删除一些子模块。3-1 单位信息子模块 单位信息子模块用于保存和显示单位信息。单位信息保存在一个名为“单位信息”的工作表中。用户可以直接在“单位信息”工作表中按照指定的格式输入单位信息,也可以执行自定义菜单【系统管理】中的【单位信息】命令,打开单位信息窗体,在单位信息窗体上输入、查看、修改单位信息。3-1-1 设计单位信息工作表“单位信息”工作表的结构如图 3-1 所示,它保存单位的一些主要信息资料。A 列是信息名称,B 列是具体信息资料数据。“单位信息”工作表是一个普通隐藏工作表,执行 Excel 的【格式】菜单中的【工作表】子菜单的【取消隐藏】命令,打开【取消隐藏】对话框,如图 3-2 所示,选中“单位信息”选项,单击【确定】按钮,即可取消对“单位信息”工作表的隐藏,并激活该工作表。图 3-1 “单位信息”工作表结构 图 3-2 【取消隐藏】对话框 3-1-2 设计单位信息窗体 单位信息窗体的结构如图 3-3 所示。单位信息窗体由 1 个用户窗体、1 个框架、10 个标签、10 个文本框和 2 个命令按钮组成,用户窗体和各个控件的功能及属性设置说明如下。(1)用户窗体:名称属性设置和 Caption 属性均设置为“单位信息”。(2)框架 Frame1:将 10 个标签和 10 个文本框组合在一起,其 Caption 属性设置为空值。(3)标签 Label1Label10:对 10 个文本框的功能进行说明,它们的 Caption 属性分别设置为“单位名称:”、“法人代表:”、“成立日期:”、“联系电话:”、“传真:”、“电 124 系统管理模块的设计 3 子邮箱:”、“邮政编码:”、“联系地址:”、“网址:”和“简介:”。(4)10 个文本框:分别用于输入或显示单位名称、单位法人代表名字、单位成立日期、单位联系电话、传真号码、电子邮箱、邮政编码、联系地址、网址和单位简介,其名称属性分别设置为“单位名称”、“法人代表”、“成立日期”、“联系电话”、“传真”、“电子邮箱”、“邮政编码”、“联系地址”、“网址”和“简介”。图 3-3 “单位信息”窗体结构(5)命令按钮 CommandButton1:当输入单位信息或对单位信息进行修改后,单击此按钮将单位信息数据保存到工作表,同时对系统工作簿“人力资源管理系统.xls”进行保存,其 Caption 属性设置为“确定”。(7)命令按钮 CommandButton2:取消操作,关闭单位信息窗体,其 Caption 属性设置为“退出”,Cancel 属性设置为 True。3-1-3 设计程序代码(1)首先定义下面的模块级变量,它们放在用户窗体对象程序代码窗口的顶部:Dim ws As Worksheet 定义工作表对象变量 Dim myTextBox As Variant 定义保存文本框名称数组变量(2)为用户窗体设置 Initialize 事件,当启动窗体时,就从“单位信息”工作表中提取单位信息,并显示在窗体上。程序代码如下:Private Sub UserForm_Initialize()Dim i As Integer Set ws=Worksheets(单位信息)myTextBox=Array(单位名称,法人代表,成立日期,联系电话,_ 传真,电子邮箱,邮政编码,联系地址,网址,简介)For i=0 To UBound(myTextBox)Me.Controls(myTextBox(i).Value=ws.Range(B&i+2)Next i Me.成立日期.Value=Format(Me.成立日期.Value,yyyy-mm-dd)End Sub(3)对“确定”命令按钮 CommandButton1 设置 Click 事件,单击此按钮,就将窗体上的单位信息保存到“单位信息”工作表,同时也对系统工作簿进行保存。程序代码如下:125 行政与人力资源管理应用案例详解Private Sub CommandButton1_Click()On Error Resume Next Dim czy As String,yhm As String ws.Range(A1)=单位信息 ws.Range(A1:B1).Select With Selection .Merge .HorizontalAlignment=xlCenter .Font.Size=22 End With For i=0 To UBound(myTextBox)ws.Range(A&i+2)=myTextBox(i)ws.Range(B&i+2)=Me.Controls(myTextBox(i).Value Next i ws.Range(A2:B3,A5:B11).NumberFormatLocal=ws.Range(A4:B4).Select Selection.NumberFormatLocal=yyyy年m月d日 Selection.HorizontalAlignment=xlLeft ws.Columns.AutoFit ws.Cells.Interior.ColorIndex=2 ws.Range(A2:B11).Select With Selection .Borders(xlEdgeLeft).Weight=xlThin .Borders(xlEdgeTop).Weight=xlThin .Borders(xlEdgeBottom).Weight=xlThin .Borders(xlEdgeRight).Weight=xlThin .Borders(xlInsideVertical).Weight=xlThin .Borders(xlInsideHorizontal).Weight=xlThin .RowHeight=16 End With ws.Range(A2).Select 将首页工作簿设置为启动时状态 czy=Sheets(首页).Range(A29).Value yhm=Sheets(首页).Range(A30).Value Sheets(首页).Unprotect Sheets(首页).Range(A29)=Sheets(首页).Range(A30)=Sheets(首页).Protect ThisWorkbook.Save 保存工作簿 将首页工作簿设置为启动后的状态 Sheets(首页).Unprotect Sheets(首页).Range(A29)=czy Sheets(首页).Range(A30)=yhm Sheets(首页).Protect End Sub(4)对“退出”命令按钮 CommandButton2 设置 Click 事件,单击此按钮,就关闭窗体。程序代码如下:Private Sub CommandButton2_Click()End End Sub 126 系统管理模块的设计 3 3-1-4 显示单位信息 执行人力资源管理系统的自定义菜单【系统管理】中的【单位信息】命令,系统即启动“单位信息”窗体,显示单位的基本信息,如图 3-4 所示。图 3-4 显示单位信息 3-2 修改登录用户名子模块 修改用户名,是加强系统保护的重要操作操作之一。修改用户名是通过一个“修改用户名”的窗体进行的,下面介绍“修改用户名”窗体的结构设计和程序设计。3-2-1 修改用户名窗体结构设计 修改用户名窗体的结构如图 3-5 所示,它由 1 个用户窗体、3 个标签、3 个文本框和 2个命令按钮组成,用户窗体和各个控件的功能及属性设置分别说明如下。图 3-5 修改用户名窗口结构(1)用户窗体:名称属性设置为“修改用户名”,Caption 属性设置为“修改用户名”。(2)标签 Label1Label3:对 3 个文本框的功能进行说明,它们的 Caption 属性分别设置为“原用户名”、“新用户名:”和“确认用户名:”。(3)文本框 TextBox1:用于输入原用户名,其名称属性设置为“原用户名”。(4)文本框 TextBox2:用于输入新用户名,其名称属性设置为“新用户名”。127 行政与人力资源管理应用案例详解(5)文本框 TextBox3:再输入一遍新用户名,用于确认输入的新用户名,其名称属性设置为“确认新用户名”。(6)命令按钮 CommandButton1:输入新用户名后,单击此按钮完成用户名修改,并保存系统工作簿,其 Caption 属性设置为“确定”,Default 属性设置为 True。(7)命令按钮 CommandButton2:取消用户名修改,其 Caption 属性设置为“取消”,Cancel 属性设置为 True。3-2-2 程序代码设计 对 2 个命令按钮设置 Click 事件,并编写如下的程序代码:Private Sub CommandButton1_Click()On Error GoTo errorhandle Dim ws As Worksheet,noExist As Boolean,czy As String,yhm As String noExist=False If 新用户名.Text 原用户名.Text Then MsgBox 两次输入的新用户名不一样!请重新输入新用户名!,vbCritical,警告 新用户名.Text=:原用户名.Text=:新用户名.SetFocus:Exit Sub End If Set ws=Worksheets(用户名密码)For i=1 To ws.Range(A65536).End(xlUp).Row If ws.Range(A&i).Text=原用户名.Text Then ws.Unprotect Password:=hxl ws.Range(A&i)=新用户名.Text:ws.Range(C&i)=Now()ws.Protect Password:=hxl 将首页工作表中的当前用户名进行修改 Sheets(首页).Unprotect Sheets(首页).Range(A30)=新用户名.Text 原用户名.Text=:新用户名.Text=:确认新用户名.Text=MsgBox 用户名修改成功!请记好您的新用户名!,_ vbInformation,用户名修改成功 Unload 修改用户名 将首页工作簿设置为启动时状态 czy=Sheets(首页).Range(A29).Value yhm=Sheets(首页).Range(A30).Value Sheets(首页).Range(A29)=:Sheets(首页).Range(A30)=Sheets(首页).Protect ThisWorkbook.Save 保存工作簿 将首页工作簿设置为启动后的状态 Sheets(首页).Unprotect Sheets(首页).Range(A29)=czy:Sheets(首页).Range(A30)=yhm Sheets(首页).Protect Exit Sub Else noExist=True End If Next i If noExist=True Then MsgBox 没有用户名&原用户名.Text&!,vbCritical,警告 Unload 修改用户名 End If 128 系统管理模块的设计 3 errorhandle:If Err.Number 0 Then MsgBox 错误!+CStr(Err.Description),vbCritical,错误 End If End Sub Private Sub CommandButton2_Click()Unload 修改用户名 End Sub 3-2-3 修改用户名示例 系统只允许对已经存在的用户名进行修改。当用户名修改成功后,系统就会弹出【用户名修改成功】的对话框,如图 3-6 所示,单击【确定】按钮后,系统将自动保存用户名修改信息。如果输入了不存在的用户名,系统会弹出没有用户名的【警告】对话框,如图 3-7 所示,单击【确定】按钮后,系统将退出用户名修改程序。图 3-6 【用户名修改成功】对话框 图 3-7 【警告】对话框 3-3 修改用户登录密码子模块 修改用户登录密码,也是加强系统保护的重要操作之一。修改用户登录密码是通过一个“修改密码”的窗体进行的,下面介绍“修改密码”窗体的结构设计和程序设计。3-3-1 修改密码窗体结构设计 修改密码窗体的结构如图 3-8 所示,它由 1 个用户窗体、3 个标签、3 个文本框和 2 个命令按钮组成,用户窗体和各个控件的功能及属性设置分别说明如下。图 3-8 修改登录密码窗口结构(1)用户窗体:名称属性设置为“修改密码”,Caption 属性设置为“修改密码”。129 行政与人力资源管理应用案例详解(2)标签 Label1Label3:对 3 个文本框的功能进行说明,它们的 Caption 属性分别设置为“请输入用户名:”、“新密码:”和“确认新密码:”。(3)文本框 TextBox1:输入用户名,其名称属性设置为“用户名”。(4)文本框 TextBox2:输入新密码,其名称属性设置为“新密码”,PasswordChar 属性设置为“*”。(5)文本框 TextBox3:再输入一遍新密码,用于确认输入的新密码,其名称属性设置为“确认新密码”,PasswordChar 属性设置为“*”。(6)命令按钮 CommandButton1:输入新密码后,单击此按钮完成密码修改,并保存系统工作簿,其 Caption 属性设置为“确定”,Default 属性设置为 True。(7)命令按钮 CommandButton2:放弃密码修改,其 Caption 属性设置为“取消”,Cancel属性设置为 True。3-3-2 程序代码设计 对 2 个命令按钮设置 Click 事件,并编写如下的程序代码:Private Sub CommandButton1_Click()On Error GoTo errorhandle Dim ws As Worksheet,noExist As Boolean,czy As String,yhm As String noExist=False Set ws=Worksheets(用户名密码)If Len(新密码.Text)5 Then MsgBox 为安全起见,密码不能小于 5 位!,vbCritical,注意 新密码.Text=:确认新密码.Text=:新密码.SetFocus:Exit Sub ElseIf 新密码.Text 确认新密码.Text Then MsgBox 两次输入的密码不一致!,vbCritical,警告 新密码.Text=:确认新密码.Text=:Exit Sub End If For i=1 To ws.Range(A65536).End(xlUp).Row If ws.Range(A&i).Text=用户名.Text Then ws.Unprotect Password:=hxl ws.Range(B&i)=新密码.Text:ws.Range(C&i)=Now()ws.Protect Password:=hxl 用户名.Text=:新密码.Text=:确认新密码.Text=MsgBox 密码修改成功!请记好您的新密码!,_ vbInformation,密码修改成功 Unload 修改密码 将首页工作簿设置为启动时状态 czy=Sheets(首页).Range(A29).Value yhm=Sheets(首页).Range(A30).Value Sheets(首页).Unprotect Sheets(首页).Range(A29)=:Sheets(首页).Range(A30)=Sheets(首页).Protect ThisWorkbook.Save 保存工作簿 将首页工作簿设置为启动后的状态 Sheets(首页).Unprotect Sheets(首页).Range(A29)=czy:Sheets(首页).Range(A30)=yhm Sheets(首页).Protect Exit Sub 130 系统管理模块的设计 3 Else noExist=True End If Next i If noExist=True Then MsgBox 没有用户名&用户名.Text&!,vbCritical,警告 Unload 修改密码 End If errorhandle:If Err.Number 0 Then MsgBox 错误!+CStr(Err.Description),vbCritical,错误 End If End Sub Private Sub CommandButton2_Click()Unload 修改密码 End Sub 3-2-3 修改用户登录密码示例 系统要求用户输入 5 位以上的密码,如果输入的密码位数小于 5 位,系统会弹出如图3-9 所示的【注意】对话框。如果两次输入的密码不一样,系统会弹出如图 3-10 所示的【警告】对话框。当密码修改成功后,系统会弹出【密码修改成功的】对话框,如图 3-11 所示,单击【确定】按钮后,系统将自动保存修改后的密码。如果用户在登录窗口中输入了一个不存在的用户名,并试图修改密码,系统就会弹出没有该用户名的【警告】对话框,如图 3-12 所示。图 3-9 密码位数不能小于 5 位 图 3-10 两次输入的密码不一样 图 3-11 密码修改成功 图 3-12 对不存在的用户名修改密码 3-4 设置系统参数子模块 设置系统参数子模块,用于对系统提醒参数进行设置,比如职工生日是否提醒,提前提醒天数为几天;职工的合同到期或应聘人员的试用期到期是否提醒,提前提醒天数为几天等。本设置系统参数子模块仅提供了职工生日和职工合同及应聘人员试用期提醒参数的设置。读者可以增加一些企业需要提醒的其他项目,并设置其参数,其方法是一样的。131 行政与人力资源管理应用案例详解3-4-1 设计系统提醒参数工作表“系统提醒参数”工作表结构如图 3-13 所示。该工作表是一个普通的隐藏工作表,在A 列保存提醒项目名称,在 B 列保存需要提前提醒的天数,在 C 列保存是否提醒的控制常量(是或否)。如果用户需要查看该工作表,可以通过执行 Excel 的【格式】菜单中的【工作表】子菜单的【取消隐藏】命令,来取消该工作表的隐藏。图 3-13 “系统提醒参数”工作表结构 3-4-2 设置系统参数窗体结构设计 用户除了在“系统提醒参数”工作表中直接设置系统提醒参数外,还可以通过一个“设置系统参数”窗口对系统参数进行设置。设置系统参数窗口的结构如图 3-14 所示,它由 1个用户窗体、1 个框架、3 个复选框、6 个标签、3 个文本框和 2 个命令按钮组成,用户窗体和各个控件的功能及属性设置分别说明如下。图 3-14 设置系统提醒参数窗口结构(1)用户窗体:名称属性设置为“设置系统参数”,Caption 属性设置为“设置系统参数”。(2)框架 Frame1:将复选框、标签和文本框组合在一起,其 Caption 属性设置为“到期提醒参数”。(3)3 个复选框:用于选择在启动系统时是否显示各项提醒功能,其名称属性分别设置为“生日提醒”、“试用期提醒”和“合同提醒”;其 Caption 属性分别设置为“系统启动时是否显示生日提醒”、“系统启动时是否显示试用期到期提醒”和“系统启动时是否显示合同到期提醒”;其 Value 属性均设置为 True。(4)6 个标签:分别对 3 个文本框的功能进行说明,它们的 Caption 属性分别设置为“生 132 系统管理模块的设计 3 日前”、“天内提醒”、“到期前”、“天内提醒”、“到期前”和“天内提醒”。(5)3 个文本框:分别用于输入职工生日、试用期到期日、和合同到期日提前提醒的天数,其名称属性分别设置为“生日提醒天数”、“试用期提醒天数”和“合同提醒天数”,其 Value 属性均设置为“10”。(6)命令按钮 CommandButton1:设置系统提醒参数后,单击此按钮保存系统提醒参数,其 Caption 属性设置为“保存”。(7)命令按钮 CommandButton2:取消系统提醒参数设置操作,关闭窗体,其 Caption属性设置为“退出”,Cancel 属性设置为 True。3-4-2 程序代码设计(1)定义下面的模块级变量:Dim ws As Worksheet 定义工作表对象变量(2)对用户窗体设置 Initialize 事件,当启动窗体时,从“系统提醒参数”工作表中提取系统提醒参数,并显示在窗体上。程序代码如下:Private Sub UserForm_Initialize()Set ws=Worksheets(系统提醒参数)If ws.Range(C2)=是 Then 生日提醒.Value=True 生日提醒天数.Value=ws.Range(B2)Else 生日提醒.Value=False 生日提醒天数.Value=End If If ws.Range(C3)=是 Then 试用期提醒.Value=True 试用期提醒天数.Value=ws.Range(B3)Else 试用期提醒.Value=False 试用期提醒天数.Value=End If If ws.Range(C4)=是 Then 合同提醒.Value=True 合同提醒天数.Value=ws.Range(B4)Else 合同提醒.Value=False 合同提醒天数.Value=End If End Sub(3)对“保存”命令按钮 CommandButton1 设置 Click 事件,单击此按钮,就将设置的系统提醒参数保存到“系统提醒参数”工作表,同时也保存系统工作簿。程序代码如下:Private Sub CommandButton1_Click()ws.Unprotect If 生日提醒.Value=True Then ws.Range(C2)=是:ws.Range(B2)=Val(生日提醒天数.Value)Else ws.Range(C2)=否:ws.Range(B2)=0 End If 133 行政与人力资源管理应用案例详解 If 试用期提醒.Value=True Then ws.Range(C3)=是:ws.Range(B3)=Val(试用期提醒天数.Value)Else ws.Range(C3)=否:ws.Range(B3)=0 End If If 合同提醒.Value=True Then ws.Range(C4)=是:ws.Range(B4)=Val(合同提醒天数.Value)Else ws.Range(C4)=否:ws.Range(B4)=0 End If ws.Protect 将首页工作簿设置为启动时状态 czy=Sheets(首页).Range(A29).Value:yhm=Sheets(首页).Range _ (A30).Value Sheets(首页).Unprotect Sheets(首页).Range(A29)=:Sheets(首页).Range(A30)=Sheets(首页).Protect ThisWorkbook.Save 保存工作簿 将首页工作簿设置为启动后的状态 Sheets(首页).Unprotect Sheets(首页).Range(A29)=czy:Sheets(首页).Range(A30)=yhm Sheets(首页).Protect Unload 设置系统参数 End Sub(4)对“退出”命令按钮 CommandButton2 设置 Click 事件,单击此按钮,就关闭窗体。程序代码如下:Private Sub CommandButton2_Click()End End Sub 3-5 系统提醒子模块 系统提醒子模块,用于完成职工生日、应聘人员试用期和职工劳动合同到期等的提醒功能,使企业的人力资源管理工作更加人性化,做到有条不紊,提前准备。本系统提醒子模块仅提供了职工生日和职工合同及应聘人员试用期的提醒功能。读者可以增加一些企业其他的需要提醒的项目,其方法是一样的。3-5-1 系统提醒窗体结构设计 系统提醒子模块的功能是通过一个“系统提醒”窗体完成的。“系统提醒”窗体的结构分别如图 3-15、图 3-16 和图 3-17 所示,它是由 1 个用户窗体、1 个多页控件 MultiPage1、3 个 Spreadsheet 控件、1 个标签、1 个框架和 1 个命令按钮组成。需要说明的是,Spreadsheet 控件不是一个常用控件,需要将其添加到控件工具箱,如图3-18所示,这里,对Excel 2000,Spreadsheet控件名称为“Microsoft Office Spreadsheet9.0”,对 Excel 2002,Spreadsheet 控件名称为“Microsoft Office Spreadsheet10.0”,对 Excel 2003,Spreadsheet 控件名称为“Microsoft Office Spreadsheet11.0”,读者可根据自己计算机的配置情况选择相应的 Spreadsheet 控件。134 系统管理模块的设计 3 图 3-15 职工生日提醒窗口结构 图 3-16 应聘人员试用期到期提醒窗口结构 图 3-17 职工合同到期提醒窗口结构 在用户窗体上插入 Spreadsheet 控件后的 Spreadsheet 控件界面如图 3-19 所示,用户可以对 Spreadsheet 控件进行设置。单击 Spreadsheet 控件工具栏中的【命令和选项】按钮,打开【命令和选项】对话框,如图 3-20 所示。Spreadsheet 控件的【命令和选项】对话框有 135 行政与人力资源管理应用案例详解几个选项卡可以选择并进行设置。图 3-18 向控件工具箱添加 Spreadsheet 控件 图 3-19 用户窗体上插入了 Spreadsheet 控件 例如,单击“工作簿”选项卡,打开“工作簿”选项卡对话框,如图 3-21 所示,在“工作表名称”列表框中,保留工作表“Sheet1”,删除工作表“Sheet2”和“Sheet3”;取消“工作表选择器”复选框和“工具栏”复选框;在“格式”选项卡对话框(见图 3-20)中,对Spreadsheet 控件的文本格式(对齐方式、字体、单元格、边框等)进行设置。在有关的设置完成后,单击【命令和选项】对话框右上角的关闭按钮,关闭【命令和选项】对话框。当关闭【命令和选项】对话框后,如果要重新显示【命令和选项】对话框,可以单击Spreadsheet 控件中的任一单元格,再单击鼠标右键,在弹出的快捷菜单中执行【命令和选项】命令,即可打开【命令和选项】对话框。图 3-20 Spreadsheet 控件的【命令和选项】对话框 图 3-21 设置 Spreadsheet 控件的“工作簿”选项 下面介绍系统提醒窗体各个控件的功能及属性设置。(1)用户窗体:名称属性设置为“系统提醒”,Caption 属性设置为“系统提醒!”。(2)多页控件 MultiPage1:保留 3 个页面 Page1、Page2 和 Page3,其 Caption 属性分别设置为“生日提醒”、“试用期即将到期提醒”和“合同即将到期提醒”。(3)控件 Spreadsheet1:用于显示职工生日的提醒信息。在单元格 A1F1 中分别输入“职工编号”、“姓名”、“性别”、“所属部门”、“出生日期”和“距生日天数”,并将字体加粗,上下左右居中对齐。(4)控件 Spreadsheet2:用于显示应聘人员试用期到期日的提醒信息。在单元格 A1H1 中分别输入“职工编号”、“姓名”、“性别”、“所属部门”、“试用期起始日”、136 系统管理模块的设计 3“试用期终止日”、“合同种类”和“距到期日天数”,并将字体加粗,上下左右居中对齐。(5)控件 Spreadsheet3:用于显示职工的劳动合同到期日的提醒信息。在单元格 A1H1 中分别输入“职工编号”、“姓名”、“性别”、“所属部门”、“合同起始日”、“合同终止日”、“合同种类”和“距到期日天数”,并将字体加粗,上下左右居中对齐。(6)框架 Frame1:用于将用户窗体分成上下两部分,其 Caption 设置为空值,Height属性设置为 3,使其看起来像两条平行直线。(7)标签 Label1:用于显示当天生日的职工名字,在程序中对这个标签的有关属性进行设置,并将其设置为从右向左不断滚动。(8)命令按钮 CommandButton1:用于关闭系统提醒窗口,其 Caption 属性设置为“关闭”。3-5-2 程序代码设计 为了实现职工生日的系统提醒功能,首先对“职工基本信息”数据表进行查询,查询并计算每个职工生日距今天的天数,然后将这个计算出的天数在生日提醒天数以内的所有职工的职工编号、姓名、性别、所属部门、出生日期以及距生日天数输出到控件Spreadsheet1。在计算每个职工生日距今天的天数时,不能简单地将两个出生日期和当前日期相减,要考虑到生日(这里的生日是指出生的月份和日期)的跨年度情况,例如,当前的日期是2005 年 12 月 22 日,假若某个职工的出生日期是 1985 年 1 月 5 日,则今天距该职工生日的天数就不能直接由日期“2005-12-22”减去“1985-1-5”进行计算,而是必须将出生日期进行处理,即将出生日期变换为“2006-1-5”,然后再将日期“2006-1-5”减去日期“2005-12-22”,得到距生日的天数为 14 天。为了使系统提醒窗口信息生动活泼,更加人性化,这里涉及了一个在窗体顶部从右到左滚动的字幕,用于显示当天过生日的职工姓名。在计算距合同和试用期到期日的天数时,就比较简单了,从数据表“职工合同信息”中查询出职工的合同到期日或应聘人员的试用期到期日数据后,直接将该日期减去今天的日期就可以了。但要注意,如果得到的天数为负值,说明到期日(指完整到期日,例如“2006年 2 月 15 日”)已经过去,就不需要显示该职工的提醒信息了。(1)定义如下的模块级变量:Dim cnn As ADODB.Connection Dim ws As Worksheet Dim mysp As String Dim Flg As Boolean(2)定义 API 函数,以便能够在窗体顶部显示滚动字幕:Private Declare Sub Sleep Lib kernel32(ByVal dwMilliseconds As Long)(3)对用户窗体设置 Initialize 事件,当启动窗体时,查询有关的数据表,并根据用户设定的是否显示提醒信息,在窗体上显示出提醒信息。程序代码如下:Private Sub UserForm_Initialize()On Error Resume Next Dim mydata As String 系统提醒.Caption=Space(5)&系统提醒!&Space(40)_&今天是:&Space(10)&Format(Date,yyyy-mm-dd)_ 137 行政与人力资源管理应用案例详解&Space(10)&WeekdayName(Weekday(Date)Set ws=Worksheets(系统提醒参数)建立与人事管理数据库的连接 mydata=ThisWorkbook.Path&人事管理.mdb Set cnn=New ADODB.Connection With cnn .Provider=microsoft.jet.oledb.4.0 .Open mydata End With 查询并显示生日提醒信息 If ws.Range(C2)=是 Then mysp=Spreadsheet1 mydata=职工编号,姓名,性别,所属部门,出生日期 Spreadsheet1.ActiveSheet.Unprotect Call 提醒子程序(mydata,职工基本信息,出生日期,生日,B2)Spreadsheet1.ActiveSheet.Columns(A:A).NumberFormat=00000 Spreadsheet1.ActiveSheet.Columns(A:A).HorizontalAlignment=xlCenter Spreadsheet1.ActiveSheet.Columns(C:C).HorizontalAlignment=xlCenter Spreadsheet1.ActiveSheet.Columns(E:E).NumberFormat=yyyy-mm-dd Spreadsheet1.ActiveSheet.Columns(F:F).HorizontalAlignment=xlCenter Spreadsheet1.ActiveSheet.Cells.Font.Size=10 Spreadsheet1.ActiveSheet.Columns.AutoFit Spreadsheet1.ActiveSheet.Protect End If 查询并显示试用期提醒信息 If ws.Range(C3)=是 Then mysp=Spreadsheet2 mydata=职工编号,姓名,性别,所属部门,合同起始日,合同终止日,合同类型 Spreadsheet2.ActiveSheet.Unprotect Call 提醒子程序(mydata,职工合同信息,合同终止日,试用,B3)Spreadsheet2.ActiveSheet.Columns(A:A).NumberFormat=00000 Spreadsheet2.ActiveSheet.Columns(A:A).HorizontalAlignment=xlCenter Spreadsheet2.ActiveSheet.Columns(C:C).HorizontalAlignment=xlCenter Spreadsheet2.ActiveSheet.Columns(E:F).NumberFormat=yyyy-mm-dd Spreadsheet2.ActiveSheet.Columns(G:H).HorizontalAlignment=xlCenter Spreadsheet2.ActiveSheet.Cells.Font.Size=10 Spreadsheet2.ActiveSheet.Columns.AutoFit Spreadsheet2.ActiveSheet.Protect End If If ws.Range(C4)=是 Then mysp=Spreadsheet3 mydata=职工编号,姓名,性别,所属部门,合同起始日,合同终止日,合同类型 Spreadsheet3.ActiveSheet.Unprotect Call 提醒子程序(mydata,职工合同信息,合同终止日,正式,B4)Spreadsheet3.ActiveSheet.Columns(A:A).NumberFormat=00000 Spreadsheet3.ActiveSheet.Columns(A:A).HorizontalAlignment=xlCenter Spreadsheet3.ActiveSheet.Columns(C:C).HorizontalAlign