版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C H A P T E R奖金管理模块的设计7-1 奖金管理模块的总体设计7-2 新建奖金表子模块设计7-3 打开奖金表子模块设计7-4 导出奖金表子模块设计7-5 产生银行代发奖金文件子模块设计7-6 发送奖金邮件子模块设计7-7 利用 Jmail 组件建立奖金邮件群发系统7-8 为奖金管理自定义菜单命令和自定义命令按钮指定宏工资管理应用案例详解奖金管理,是指对企业为职工发放的各种不属于日常奖金项目的、特殊的奖励。奖金管理模块的主要功能就是对这些特殊奖金进行管理。一个奖金管理模块,至少应具有以下的功能:建立、编辑、浏览及导出奖金管理数据表、发放奖金、产生银行代发奖金文件、发送邮件等。本章将详
2、细介绍奖金管理模块的设计方法和步骤。7-1 奖金管理模块的总体设计7-1-1 奖金管理模块的构成奖金管理模块由以下 5 个子模块组成,各个子模块的功能如下。1新建奖金表不同的奖金应设立不同的奖金管理数据表。新建奖金表子模块的功能就是创建各种奖金数据表,并对奖金数据进行添加、修改、删除、查询、浏览等管理。2打开奖金表打开奖金表子模块的功能是对现有的奖金数据表进行奖金数据的添加、修改、删除、保存、查询和导出等管理。3导出奖金表导出奖金表子模块的功能是将奖金数据表的数据导出到 Excel 工作表,以备查阅。4产生银行代发奖金文件对于一些需要银行代发的奖金项目,生成银行代发奖金文件。5发送奖金表邮件发
3、送奖金表邮件子模块的功能是将某次发给某些职工的奖金明细数据以邮件正文的形式通知每个职工。7-1-2 设计奖金管理数据表奖金管理模块是以“奖金管理.mdb”数据库为基础,在数据库“奖金管理.mdb”中保存每次发放奖金的数据表,这些数据表有不同的名称(比如 2005 年终奖的奖金数据表名字可以为“2005 年终奖”,2006 年国庆节补贴数据表的名字可以为“2006 年国庆节补贴”等),但它们的数据格式是相同的,如表 7-1 所示。表 7-1 奖金数据表字段字段名称字段类型字段大小是否允许为空说明职工编号姓名性别所属部门文本文本文本文本510110否否否否关键字段。来源于“职工基本信息”数据表来源
4、于“职工基本信息”数据表来源于“职工基本信息”数据表来源于“职工基本信息”数据表奖金额294 数字单精度型否发放时间日期/时间否奖金管理模块的设计7 奖金数据表由系统自动创建,具体的程序代码可参阅本章的有关内容。 7-2 新建奖金表子模块设计新建奖金表子模块的功能就是创建各种奖金数据表,并对奖金数据进行添加、修改、删除、查询、浏览等管理。新建奖金表子模块的这些功能是通过一个“新建奖金表”窗体、一个“浏览编辑奖金数据”窗体和一个“奖金批量输入修改”窗体共同实现的。7-2-1 新建奖金表窗体结构设计“新建奖金表”窗体的结构如图 7-1 所示。“新建奖金表”窗体由 1 个用户窗体 2 个框架、2 个
5、标签、1 个文本框、1 个 DTPicker 控件、2 个选项按钮和 2 个命令按钮构成。用户窗体及各个控件的功能和属性设置说明如下。图 7-1 “新建奖金表”窗体结构(1)用户窗体:名称属性和 Caption 属性均设置为“新建奖金表”。(2)2 个框架:分别将不同功能的控件组合在一起,其 Caption 属性分别设置为“奖金表名称及发放时间”和“发放职工范围”。(3)2 个标签:分别对 1 个文本框和 1 个 DTPicker 控件的功能进行说明,其 Caption属性分别设置为“奖金名称:”、“发放时间:”。(4)1 个文本框:用于输入奖金表的名称,其名称属性设置为“奖金名称”。(5)1
6、 个 DTPicker 控件:用于输入奖金的发放日期,其名称属性设置为“发放时间”。(6)2 个选项按钮:分别用于选择奖金的发放范围,其名称属性和 Caption 属性均分别设置为“全部职工”和“部分职工”,其中选项按钮“全部职工”的 Value 属性设置为 True。(7)2 个命令按钮:分别完成创建奖金表和关闭窗体的功能,其名称属性和 Caption 属性均分别设置为“创建”和“取消”。7-2-2新建奖金表窗体程序代码设计针对企业发放奖金的对象有可能是全部职工,也可能是部分职工,因此在创建奖金表时就考虑到了这种情况。当奖金的发放对象是全部职工时,系统将建立全部职工的奖金表,同时在创建数据表
7、时,就将数据表中所有职工的奖金额先输入零值,这样,就可以使用“浏览编辑奖金数据”窗体中的批量修改功能提高数据输入速度。当奖金的发放对象是部分职295工资管理应用案例详解工时,系统将建立一个空奖金表,等待用户输入具体的职工及奖金额。下面介绍“新建奖金表”窗体及有关控件的事件程序代码设计。1为“新建奖金表”窗体设计 Initialize 事件程序为“新建奖金表”窗体设置 Initialize 事件,以便在启动“新建奖金表”窗体时,系统自动设置奖金发放时间。“新建奖金表”窗体的 Initialize 事件程序代码如下:Private Sub UserForm_Initialize()发放时间.Val
8、ue = Date 奖金名称.SetFocus End Sub2为【创建】按钮设计 Click 事件程序单击【创建】按钮,系统将根据设定的条件和参数,创建新的奖金数据表。【创建】按钮的 Click 事件程序代码如下:Private Sub 创建_Click() Dim cnn As ADODB.Connection Dim mydata As String Dim cmd As ADODB.Command Dim rs As ADODB.Recordset Dim rsRS As ADODB.Recordset 建立奖金管理数据库 mydata = ThisWorkbook.Path & 奖金
9、管理.mdb Set fs = CreateObject(Scripting.FileSystemObject) If fs.FileExists(mydata) = False Then MsgBox 还没有奖金管理数据库! & 系统将自动创建奖金管理数据库!, _ vbInformation, 注意 Set myaccess = CreateObject(Access.Application) myaccess.NewCurrentDatabase mydata myaccess.CloseCurrentDatabase Set myaccess = Nothing End If Set
10、fs = Nothing 建立与数据库“奖金管理.mdb”的连接 Set cnn = New ADODB.Connection With cnn .Provider = microsoft.jet.oledb.4.0 .Open mydata End With 创建奖金数据表 If TableExists(奖金名称.Value, cnn) = False Then Set cmd = New ADODB.Command Set cmd.ActiveConnection = cnn cmd.CommandText = create table &奖金名称.Value _ & (职工编号 text
11、(5),姓名 text(10),性别 text(1), _ & 所属部门 text(10),奖金额 single,发放时间 date) cmd.Execute , , adCmdText Set cmd = Nothing Else MsgBox 奖金数据表已经存在! _296 奖金管理模块的设计 & 请重新设置奖金表名字!, vbCritical + vbOKOnly, 警告奖金名称.Value = 奖金名称.SetFocus Exit Sub End If 查询奖金数据表 mysql = select * from &奖金名称.Value rs.Open mysql, cnn, adOpe
12、nKeyset, adLockOptimistic 为奖金数据表输入数据 If 全部职工.Value = True Then mydata = ThisWorkbook.Path & 人事信息.mdb Set cnnRS = New ADODB.Connection With cnnRS .Provider = microsoft.jet.oledb.4.0 .Open mydata End With mysql = select职工编号,姓名,性别,所属部门 _ & from 职工基本信息 order by 职工编号 rsRS.Open mysql, cnnRS, adOpenKeyset,
13、 adLockOptimistic rs.AddNew For j = 0 To 3 rs.Fields(j) = rsRS.Fields(j) Next j rs.Fields(4) = 0 rs.Fields(5) =发放时间.Value rs.Update rsRS.MoveNext Next i Set rsRS = Nothing cnnRS.Close Set cnnRS = Nothing End If Set rs = Nothing Set cnn = Nothing Unload新建奖金表浏览编辑奖金数据.奖金表.Value =奖金名称.Value浏览编辑奖金数据.Show
14、 End Sub3为“取消”按钮设计 Click 事件程序单击【取消】按钮,系统将关闭窗体。【取消】按钮的 Click 事件程序代码如下:Private Sub 取消_Click() EndEnd Sub7-2-3 浏览编辑奖金数据窗体结构设计2977 工资管理应用案例详解“浏览编辑奖金数据”窗体结构与“浏览编辑工资数据”窗体结构基本相同,所不同的是在“浏览编辑奖金数据”窗体上仅有一个可以输入奖金数据的文本框,而命令按钮也要少一些。“浏览编辑奖金数据”窗体结构如图 7-2 和图 7-3 所示。图 7-2 浏览编辑奖金数据窗体结构按部门输入数据图 7-3 浏览编辑奖金数据窗体结构按职工编号输入数
15、据“浏览编辑奖金数据”窗体由 1 个用户窗体、6 个框架、6 个标签、1 个复合框、5 个文本框、1 个 DTPicker 控件、1 多页控件、1 个 TreeView 控件、2 个 ListView 控件和 4 个命令按钮组成。用户窗体及各个控件的功能及属性设置说明如下。(1)用户窗体:名称属性和 Caption 属性设置均设置为“浏览编辑奖金数据”。(2)6 个框架:它们用于将不同功能的控件组合在一起,其中 5 个框架的 Caption 属性分别设置为“选择奖金表”、“职工列表”、“职工信息”、“奖金数据”和“奖金明细”;1 个框架的 Caption 属性设置为空值。298 奖金管理模块的
16、设计(3)6 个标签:分别对有关的控件功能进行说明,其 Caption 属性分别设置为“职工编号:”、“姓名:”、“性别:”、“所属部门:”、“奖金数据:”和“发放日期:”。(4)1 个复合框:用于选择要操作的奖金表,其名称属性设置为“奖金表”。(5)5个文本框:分别显示或输入职工编号、姓名、性别、所属部门和奖金数据,其名称属性分别设置为“职工编号”、“姓名”、“性别”、“所属部门”、“奖金额”。(6)1 个 DTPicker 控件:用于输入奖金发放日期,其名称属性设置为“发放日期”。(7)1个多页控件及其上面的控件:用于按部门和按职工编号显示职工的基本信息,它有 2 个页面,页面 1(Pag
17、e1)的 Caption 属性设置为“按部门”,在页面上插入一个 TreeView控件(名称为 TreeView1);页面 2(Page2)的 Caption 属性设置为“按职工编号”,在页面上插入一个 ListView 控件(名称为 ListView1)。(8)在“奖金明细”框架内插入一个ListView 控件(名称为 ListView2),用于显示所有职工的奖金明细数据。(9)4 个命令按钮:分别完成单个职工奖金数据的输入/修改、批量输入/修改奖金数据、删除某个职工的奖金记录、关闭窗体等功能,其名称属性分别设置为“保存修改”、“批量输入修改”、“删除”和“退出”,其 Caption 属性分
18、别设置为“保存/修改”、“批量输入/修改”、“删除”和“退出”。7-2-4 浏览编辑奖金数据窗体程序代码设计浏览编辑奖金数据,就是以数据库“奖金管理.mdb”为基础,在“浏览编辑奖金数据”窗体上,对职工的奖金数据进行输入、计算、修改、删除、显示、查询和浏览等,所有这些功能都是通过“浏览编辑奖金数据”窗体和有关控件,以及一个批量输入修改窗体实现的。“浏览编辑奖金数据”主窗体及有关控件的事件程序代码与上一章介绍的“浏览编辑工资数据”主窗体及有关控件的事件程序代码基本相同。下面简要介绍“浏览编辑奖金数据”主窗体及有关控件的事件程序代码。1定义模块级变量首先定义一下的模块级变量,它们放在“浏览编辑奖金
19、数据”窗体对象程序代码窗口的顶部:Dim rs As ADODB.Recordset 2为“浏览编辑奖金数据”窗体设计 Initialize 事件程序为“浏览编辑奖金数据”窗体设置 Initialize 事件,以便在启动“浏览编辑奖金数据”窗体时,系统自动建立与“奖金管理”数据库的连接,查询有关奖金数据表,为 TreeView控件设置节点,为 ListView 控件设置项目。“浏览编辑奖金数据”窗体的 Initialize 事件程序代码如下:Private Sub UserForm_Initialize() On Error Resume Next Call 部门职工节点设置(浏览编辑奖金数据
20、) 为 Treeview 控件设置项目 Call 设置 ListView 控件(浏览编辑奖金数据) 为列表框 ListView1 控件设置项目 建立与“奖金管理”数据库的连接 Set cnn = New ADODB.Connection With cnn2997 工资管理应用案例详解 .Provider = microsoft.jet.oledb.4.0 .Open ThisWorkbook.Path & 奖金管理.mdb End With Call 查询奖金数据表(cnn,奖金表) 查询已经存在的奖金表,并设置给奖金表复合框 Call 奖金查询 查询选择的奖金账套 Call 奖金明细(rs)
21、 为职工奖金明细 ListView 控件输入数据 四个职工信息文本框不允许操作职工编号.Enabled = False 姓名.Enabled = False 性别.Enabled = False 所属部门.Enabled = False End Sub3为“奖金表”复合框设计 Change 事件程序为“奖金表”复合框设计Change事件程序,以便当在“奖金表“复合框中选择要操作奖金表时,查询选择的奖金数据表,并显示奖金明细,程序代码如下:Private Sub 奖金表_Change() Call 连接奖金数据库 Call 奖金查询 Call 奖金明细(rs)奖金额.Value = 0 End
22、Sub4为 TreeView1 控件设计 NodeClick 事件程序为 TreeView1 控件设计 NodeClick 事件程序,以便当单击 TreeView1 控件中的某个节点时,将该节点对应的职工基本信息输入到窗体相关的文本框中,并将该职工的奖金数据显示在窗体的有关文本框中,程序代码如下:Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) On Error GoTo hhh Dim mysql As String If Node.Text = Node.Key Then Exit Sub 职工编号.Value
23、= Left(Node.Text, 5) 姓名.Value = Mid(Node.Text, 8, Len(Node.Text) - 10)性别.Value = Right(Node.Text, 1) 所属部门.Value = Node.Parent.Text mysql = select * from &奖金表.Value & where职工编号= & 职工编号.Value & rs.Open mysql, cnn, adOpenKeyset, adLockOptimistic Call 显示奖金信息 Exit Subhhh: MsgBox 请选择奖金表!, vbInformation, 注
24、意奖金表.SetFocus End Sub5为 ListView1 控件设计 Click 事件程序为 ListView1 控件设计 Click 事件程序,以便当单击 ListView1 控件中的某个职工所在行时,将该行对应的职工基本信息和奖金数据输入到窗体相关的文本框中,程序代码如下:Private Sub ListView1_Click() On Error GoTo hhh Dim i As Integer, mysql As String300 i = ListView1.SelectedItem.Index 职工编号.Value = ListView1.ListItems(i).Tex
25、t 姓名.Value = ListView1.ListItems(i).SubItems(1) 性别.Value = ListView1.ListItems(i).SubItems(2) 奖金管理模块的设计7 所属部门.Value = ListView1.ListItems(i).SubItems(3) mysql = select * from &奖金表.Value & where职工编号= & 职工编号.Value & rs.Open mysql, cnn, adOpenKeyset, adLockOptimistic Call 显示奖金信息 Exit Subhhh: MsgBox 请选择
26、奖金表!, vbInformation, 注意奖金表.SetFocus End Sub6为 ListView2 控件设计 Click 事件程序为 ListView2 控件设计 Click 事件程序,以便当单击 ListView2 控件中的某个职工所在行时,将该行对应的职工的基本信息和奖金数据显示在窗体的文本框中,程序代码如下:Private Sub ListView2_Click() On Error GoTo hhh Dim i As Integer, mysql As String i = ListView2.SelectedItem.Index 职工编号.Value = ListView
27、2.ListItems(i).Text 姓名.Value = ListView2.ListItems(i).SubItems(1) 性别.Value = ListView2.ListItems(i).SubItems(2) 所属部门.Value = ListView2.ListItems(i).SubItems(3) mysql = select * from &奖金表.Value & where职工编号= & 职工编号.Value & rs.Open mysql, cnn, adOpenKeyset, adLockOptimistic Call 显示奖金信息 Exit Subhhh: Msg
28、Box 请选择奖金表!, vbInformation, 注意奖金表.SetFocus End Sub7为【保存/修改】按钮设计 Click 事件程序单击【保存/修改】按钮,就将某职工的奖金数据保存到奖金数据表中,或者对某职工的奖金数据进行修改更新。【保存/修改】按钮的 Click 事件程序代码如下:Private Sub 保存修改_Click() On Error GoTo hhh Dim rsCheck As ADODB.Recordset Dim mysql As String Call 奖金查询 检查是否已经有了某个职工的奖金记录 Set rsCheck = New ADODB.Reco
29、rdset mysql = select * from &奖金表.Value & where职工编号= & 职工编号.Value & rsCheck.Open mysql, cnn, adOpenKeyset, adLockOptimistic If rsCheck.RecordCount = 0 Then 如果没有某个职工的奖金记录,就表示添加新 _纪录 rs.AddNew 301工资管理应用案例详解 Call保存奖金数据 Else 如果已经存在了某个职工的奖金记录,就表示要修改纪录 If rs.Fields(职工编号) =职工编号.Value Then Call 保存奖金数据 Exit F
30、or End If Next i End If Set rsCheck = Nothing Call 奖金查询 Call 奖金明细(rs) Exit Subhhh: MsgBox 保存数据出现错误! & vbCrLf & vbCrLf _ & 错误为: & Err.Description, vbCritical, 保存错误End Sub8为【批量输入/修改】按钮设计 Click 事件程序如果用户想要批量输入或修改一些职工的奖金数据,可以单击【批量输入/修改】按钮,系统将打开一个批量输入修改奖金数据的窗口,用户在此窗口上设置条件,即可完成批量输入修改。【批量输入/修改】按钮的 Click 事件程
31、序代码如下:Private Sub 批量输入修改_Click()奖金批量输入修改.Show End Sub9为【删除】按钮设计 Click 事件程序如果用户想要删除某职工的奖金数据,可以通过TreeView1 控件或 ListView1 控件或ListView2 控件,将该职工的奖金记录查询并显示出来,然后单击【删除】按钮,即可将该职工的奖金记录从奖金数据表中进行删除。【删除】按钮的 Click 事件程序代码如下:Private Sub 删除_Click() If MsgBox(注意:本操作将删除 号职工的奖金数据! & vbCrLf & 确实要删除吗?, _ vbQuestion + vbY
32、esNo + vbDefaultButton2, 删除) = vbNo Then Exit Sub Dim mysql As String mysql = delete * from &奖金表.Value & where职工编号= & 职工编号.Value & rs.Open mysql, cnn, adOpenKeyset, adLockOptimistic Call 清除窗口 Call 奖金查询 Call 奖金明细(rs)End Sub10为【退出】按钮设计 Click 事件程序单击【退出】按钮,将关闭“浏览编辑奖金数据”窗体。【退出】按钮的 Click 事件程序代码如下:302 Priv
33、ate Sub 退出_Click() EndEnd Sub11子程序“奖金查询”程序代码奖金管理模块的设计7 在上述的各个控件事件程序中,调用了一个名为“奖金查询”的子程序,这个子程序的功能是对奖金数据表进行查询,其程序代码如下:Public Sub奖金查询() On Error Resume Next Dim mysql As String mysql = select * from &奖金表.Value & order by职工编号 rs.Open mysql, cnn, adOpenKeyset, adLockOptimisticEnd Sub12子程序“显示奖金信息”程序代码子程序“显
34、示奖金信息”的功能就是在窗体的文本框中显示出某个职工的奖金数据,其程序代码如下:Public Sub显示奖金信息() On Error Resume Next奖金额.Value = 0 奖金额.Value = rs.Fields(奖金额)发放日期.Value = rs.Fields(发放日期)End Sub13子程序“奖金明细”程序代码子程序“奖金明细”的功能是在ListView2控件中显示出所有职工的奖金数据,其程序代码如下:Public Sub奖金明细(myRs As ADODB.Recordset) On Error Resume Next Dim myName As String 设置
35、 ListView2 的标题、显示类型、整行选择和网格线属性 ListView2.ListItems.Clear ListView2.View = lvwReport ListView2.FullRowSelect = True ListView2.Gridlines = True 设置 ListView2 的标题 For i = 0 To myRs.Fields.Count - 1 myName = myRs.Fields(i).Name If i = 0 Then ListView2.ColumnHeaders.Add , , myName, 45 Else If i = 2 Then L
36、istView2.ColumnHeaders.Add , , myName, 30, lvwColumnCenter ElseIf i = 4 Then ListView2.ColumnHeaders.Add , , myName, 40, lvwColumnRight Else 303工资管理应用案例详解 ListView2.ColumnHeaders.Add , , myName, 60, lvwColumnLeft End If End If Next i 设置 ListView2 的各行数据 myRs.MoveFirst ListView2.ListItems.Add , , myRs
37、.Fields(0) For j = 1 To myRs.Fields.Count - 1 ListView2.ListItems(i).SubItems(j) = myRs.Fields(j) Next j myRs.MoveNext Next iEnd Sub14子程序“清除窗口”程序代码子程序“清除窗口”的功能是将窗口的所有数据文本框的数据清除,其程序代码如下:Public Sub清除窗口()职工编号.Value = 姓名.Value = 性别.Value = 所属部门.Value = 奖金额.Value = 发放日期.Value = Date End Sub15子程序“保存奖金数据”程
38、序代码Public Sub保存奖金数据() rs.Fields(职工编号) = 职工编号.Value rs.Fields(姓名) = 姓名.Value rs.Fields(性别) = 性别.Value rs.Fields(所属部门) = 所属部门.Value rs.Fields(奖金额) = Val(奖金额.Value) rs.Fields(发放时间) = 发放日期.ValueEnd Sub7-2-5 奖金数据批量输入修改窗体结构设计单击“浏览编辑奖金数据”窗体上的【批量输入/修改】按钮,系统就打开一个“奖金数据批量输入修改”窗体,在此窗体上,用户可以设置批量输入修改条件,比如批量修改某部门、
39、某职称类别、某职位类别、某年龄、某工龄、某本单位工龄范围内的职工的奖金数据,然后进行批量输入或修改。“奖金数据批量输入修改”的结构如图 7-4 所示。304 图 7-4 “奖金数据批量输入修改”窗体奖金管理模块的设计7 在“奖金数据批量输入修改”窗体上,有 2 个标签、1 个文本框、3 个复合框、2 个选项按钮和 2 个命令按钮组成。用户窗体及各个控件的功能及属性设置如下。(1)用户窗体:其名称属性和 Caption 属性均设置为“奖金批量输入修改”。(2)2 个标签:分别对不同功能控件的功能进行说明,其 Caption 属性分别设置为“设置批量修改条件:”和“要批量输入及修改的金额:”。(3
40、)其他几个控件(3 个复合框、1 个文本框和 2 个命令按钮):分别完成设置修改条件、设置修改值等功能,其功能说明和有关属性设置如表 7-2 所示。表 7-2 数据控件的功能说明和属性设置控件类型复合框复合框复合框文本框选项按钮名称属性条件项目比较符条件值金额增加Caption 属性加上要修改的金额控件功能设置修改条件项目(如部门、职称、工龄等)设置比较符(包括=、=、=、)设置条件值,比如部门名称、年龄值等设置修改的金额将某个奖金项目数据加上输入的金额选项按钮修改修改为要修改的金额将某个奖金项目数据修改为输入的金额命令按钮批量输入修改批量输入/修改进行批量输入或修改命令按钮不修改不修改放弃输
41、入或修改,关闭批量输入修改窗口此外,第一个选项按钮的 Value 属性设置为 True;文本框的 Value 属性设置为“”,且其 ForeColor 属性设置为“&H00C00000&”,TextAlign 属性设置为“3-fmTextAlignRight”。7-2-6 奖金数据批量输入修改窗体程序代码设计奖金数据批量输入修改窗体的程序代码与批量修改工资数据窗体基本相同。下面简要介绍该窗体的程序代码。1为窗体设计 Initialize 事件程序为“奖金数据批量输入修改”子窗体设置 Initialize 事件,以便在启动“奖金数据批量输入修改”子窗体时,为复合框设置项目。事件程序代码如下:Pr
42、ivate Sub UserForm_Initialize() 为条件项目复合框设置项目 With 条件项目 .AddItem 所属部门 .AddItem 职务 .AddItem 职称305工资管理应用案例详解 .AddItem 文化程度 .AddItem 年龄 .AddItem 工龄 .AddItem 本单位工龄 End With条件项目.ListIndex = 0 为比较符复合框设置项目 With 比较符 .AddItem = .AddItem .AddItem = .AddItem .AddItem = End With比较符.ListIndex = 0 End Sub2为“条件项目”复
43、合框设计 Change 事件程序为“条件项目”复合框设置Change事件,以便在选择“条件项目”复合框中的项目时,系统自动根据所选的项目(比如部门、职称等)从人事信息数据库中查询相应项目,并为“条件值”复合框设置项目。同时,还根据选择的条件项目是否年龄、工龄等,将“比较符”复合框的 Value 属性和可操作性进行设置。事件程序代码如下:Private Sub 条件项目_Change() On Error Resume Next Dim mysql As String Dim cnnBase As ADODB.Connection Dim rsP As ADODB.Recordset Set c
44、nnBase = New ADODB.Connection With cnnBase .Provider = microsoft.jet.oledb.4.0 .Open ThisWorkbook.Path & 人事信息.mdb End With If 条件项目.Value = 所属部门 Then mysql = select distinct所属部门 from 职工基本信息 ElseIf条件项目.Value = 职务 Then mysql = select distinct职务 from 职工基本信息 ElseIf条件项目.Value = 职称 Then mysql = select dist
45、inct职称 from 职工基本信息 ElseIf条件项目.Value = 文化程度 Then mysql = select distinct文化程度 from 职工基本信息 End If rsP.Open mysql, cnnBase, adOpenKeyset, adLockOptimistic With 条件值 .Clear If 条件项目.Value = 所属部门 Then .AddItem 全部部门 End If If 条件项目.Value 年龄 And条件项目.Value 工龄 _And条件项目.Value 本单位工龄 Then rsP.MoveFirst 306 For i =
46、1 To rsP.RecordCount .AddItem rsP.Fields(0) rsP.MoveNext Next i End If End With条件值.ListIndex = 0 Set rsP = Nothing cnnBase.Close Set cnnBase = Nothing 奖金管理模块的设计7 If 条件项目.Value = 年龄 Or条件项目.Value = 工龄 _Or 条件项目.Value = 本单位工龄 Then比较符.Enabled = True Else比较符.ListIndex = 0比较符.Enabled = False End IfEnd Sub3
47、为【批量输入/修改】按钮设计 Click 事件程序为【批量输入/修改】按钮设置 Click 事件,当单击此按钮时,系统就根据所设置的输入修改条件对奖金数据进行批量修改。【批量输入/修改】按钮的 Click 事件程序代码如下:Private Sub 批量输入修改_Click() On Error Resume Next Dim mysql As String, myText As String Dim cnnBase As ADODB.Connection Dim cnnSalary As ADODB.Connection Dim rsP As ADODB.Recordset Dim rsPX
48、As ADODB.Recordset 建立与奖金管理数据库的连接 Set cnnSalary = New ADODB.Connection With cnnSalary .Provider = microsoft.jet.oledb.4.0 .Open ThisWorkbook.Path & 奖金管理.mdb End With 从人事信息数据库中的“职工基本信息”数据表中查询符合条件的职工 Set cnnBase = New ADODB.Connection With cnnBase .Provider = microsoft.jet.oledb.4.0 .Open ThisWorkbook.
49、Path & 人事信息.mdb End With mysql = select职工编号 from职工基本信息 If 条件项目.Value 年龄 And条件项目.Value 工龄 _And条件项目.Value 本单位工龄 Then If 条件值.Value = 全部部门 Then mysql = mysql Else mysql = mysql & where &条件项目.Value & = &条件值.Value & End If Else mysql = mysql & where &条件项目.Value &比较符.Value &条件值.Value307工资管理应用案例详解 End If my
50、sql = mysql & order by职工编号 rsP.Open mysql, cnnBase, adOpenKeyset, adLockOptimistic rsP.MoveFirst n = rsP.RecordCount ReDim Nums(n) As String For i = 1 To n Nums(i) = rsP.Fields(0) rsP.MoveNext Next i Set rsP = Nothing If 条件项目.Value 年龄 And条件项目.Value 工龄 _And条件项目.Value 本单位工龄 Then myText = 属于 & 条件值.Valu
51、e Else myText = 的所有职工的奖金额进行统一输入修改! & vbCrLf _ & 确实要输入或修改吗?, vbQuestion + vbYesNo + vbDefaultButton2, _ 统一输入修改) = vbNo Then Exit Sub 对所有满足条件的职工奖金额进行批量输入修改 If 增加.Value = True Then mySymbol = 奖金额=奖金额+ & Val(金额.Value) ElseIf修改.Value = True Then mySymbol = 奖金额= & Val(金额.Value) End If For i = 1 To n mysql
52、 = update &浏览编辑奖金数据.奖金表.Value & set & mySymbol _ & where职工编号= & Nums(i) & Set rsP = New ADODB.Recordset rsP.Open mysql, cnnSalary, adOpenKeyset, adLockOptimistic Next i 对修改后的数据库进行查询 mysql = select * from &浏览编辑奖金数据.奖金表.Value & order by职工编号 rsP.Open mysql, cnnSalary, adOpenKeyset, adLockOptimistic Cal
53、l 浏览编辑奖金数据.奖金明细(rsP) Set rsP = Nothing cnnSalary.Close Set cnnSalary = Nothing cnnBase.Close Set cnnBase = Nothing Unload奖金批量输入修改End Sub4为【不修改】按钮设计 Click 事件程序单击【不修改】按钮,就放弃批量输入或修改,关闭“奖金批量输入修改”子窗口,返回到“浏览编辑奖金数据”主窗口。【不修改】按钮的 Click 事件程序代码如下:Private Sub 不修改_Click() 308 Unload批量修改窗口End Sub7-2-7 新建奖金表子模块应用示
54、例奖金管理模块的设计7 单击自定义菜单【奖金管理】中的【新建奖金表】命令,或单击【奖金管理】自定义工具栏中的【新建奖金表】命令按钮,系统将打开“新建奖金表”窗口,如图 7-5 所示。在“奖金名称”文本框中输入奖金名称,选择奖金发放时间,选择奖金发放职工的范围,如图 7-6 所示,单击【创建】按钮,系统就自动创建奖金数据表,并打开“浏览编辑奖金数据”窗体,如图 7-7 和图 7-8 所示,用户就可以通过此窗体输入、浏览、编辑、修改、查询奖金数据。图 7-5 “新奖金金表”窗口图 7-6 设置有关参数和条件图 7-7 “浏览编辑奖金数据”窗口全部职工发放奖金情况309工资管理应用案例详解图 7-8
55、 “浏览编辑奖金数据”窗口部分职工发放奖金情况比较图 7-7 和图 7-8 可以看出,在全部职工情况下,“浏览编辑奖金数据”窗体显示了所有职工的预设数据(奖金额为 0),此时用户就可以利用批量输入修改功能,批量输入某些职工的奖金数据。在部分职工情况下,“浏览编辑奖金数据”窗体没有显示任何职工的预设数据,因为此时奖金数据表还是一个空数据表,没有任何记录,因此,需要用户选择要发放奖金的职工输入奖金数据。以如图 7-7 所示的全部职工情况为例,进行批量输入(或修改)奖金数据的步骤如下:单击【批量输入/修改】按钮,打开“奖金批量输入修改”窗口,如图 7-9 所示。图 7-9 “奖金批量输入修改”窗口如
56、果全部职工的奖金额都是一样的,则选择“所属部门=全部部门”条件,在“金额”文本框中输入具体的金额,单击【批量输入/修改】按钮,即可完成数据的批量输入,如图7-10 所示。310图 7-10 批量输入奖金数据奖金管理模块的设计7 如果按职工的职务发放不同的奖金额,则可以设置不同的条件种类,如图 7-11 所示,然后再批量输入数据。图 7-11 按不同的条件批量输入奖金数据“奖金批量输入修改”窗口是一个非常有用的窗口,读者可以细细体会它的使用方法。当然,读者还可以根据实际情况,对这个窗口进行完善,使之功能更加丰富。7-3 打开奖金表子模块设计打开奖金表子模块的功能是打开现有的奖金数据表,通过“浏览
57、编辑奖金数据”窗体,对奖金数据进行浏览、编辑、查询等操作。关于“浏览编辑奖金数据”窗体的设计,在上一节已经作了介绍,此处不在叙述。单击自定义菜单【奖金管理】中的【打开奖金表】命令,或单击【奖金管理】自定义工具栏中的【打开奖金表】命令按钮,就可以打开“浏览编辑奖金数据”窗体,如图 7-12所示,选择要操作的奖金数据表后,即可通过次窗口浏览、编辑、查询奖金数据。311工资管理应用案例详解图 7-12 “浏览编辑奖金数据”窗口等待选择奖金数据表7-4 导出奖金表子模块设计导出奖金表子模块的功能,是将选定的奖金表导出到新的工作簿中。导出奖金表子模块的这个功能,是通过一个“导出奖金表”窗体完成的。7-4
58、-1 导出奖金表窗体结构设计“导出奖金表”窗体的结构如图 7-13 所示,它由 1 个用户窗体、1 个框架、2 个标签、2 个复合框和 2 个命令按钮构成,用户窗体和各个控件的功能及属性设置说明如下。(1)用户窗体:名称属性和Caption属性均设置为“导出奖金表”。(2)2个标签:分别对 2 个复合框的功能进行说明,其Caption属性分别设置为“选择奖金图 7-13 “导出奖金表”窗体结构表:”和“选择导出部门:”。(3)1 个框架:用于将不同功能的控件组合在一起,美化窗体,其 Caption 属性设置为空值。(4)2个复合框:分别用于选择要导出的奖金表和选择导出奖金表的部门(即可以按部门
59、导出各个部门的将金表,也可以导出全部部门的将金表),其名称属性分别设置为“奖金表”和“部门”。(5)2 个命令按钮:分别完成导出奖金表和关闭窗口的功能,其名称属性和 Caption 属性均分别设置为“导出”和“取消”。 7-4-2 导出奖金表窗体程序代码设计当选定需要导出的奖金表以及导出部门后,单击【导出】按钮,即可将该奖金表导出312奖金管理模块的设计到一个新的工作簿中。下面介绍“导出奖金表”主窗体及有关控件的事件程序代码。1定义模块级变量首先定义下面的模块级变量,它们放在窗体对象程序代码窗口的顶部:Dim rs As ADODB.Recordset 2为用户窗体设计 Initialize
60、事件程序为用户窗体设置 Initialize 事件,以便在启动“导出奖金表”窗体时,系统自动建立与奖金管理数据库的连接,为“奖金表”复合框设置项目。“导出奖金表”窗体的Initialize事件程序代码如下:Private Sub UserForm_Initialize() On Error Resume Next 建立与“奖金管理”数据库的连接 Set cnn = New ADODB.Connection With cnn .Provider = microsoft.jet.oledb.4.0 .Open ThisWorkbook.Path & 奖金管理.mdb End With 查询已经存在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人工智能在律师行业的应用概述
- 老旧街区排水防涝设施改造项目实施过程中的应急预案
- 标准厂房项目概述
- 2024广告牌保修合同范文
- S-S-Lysinoalanine-生命科学试剂-MCE
- 排水管网更新改造项目规划设计方案
- 有地下室房屋出售合同(3篇)
- 授权委托书(公司)(33篇)
- 未来的商业计划书(3篇)
- 责任的演讲稿
- 挂网喷射混凝土基坑开挖支护专项施工方案
- 高三化学试卷讲评课件
- 半导体DIF是什么工艺
- 生涯发展报告 (第二版)
- 财务管理大学生的职业生涯规划
- 危化品运输安全培训-危险品与非危险品的混装与分装标准
- 扎实推进安全体系建设范文
- 启迪人才测评试卷
- 《专利及专利申请》课件
- 中国儿童注意缺陷多动障碍(ADHD)防治指南
- 城市燃气安全管理技术
评论
0/150
提交评论