摘要:本文通过利用Excel内嵌的VBA编程语言和Excel的宏功能相结合,实现了Excel下工资条的制作与工资查询窗口的建立。
关键词:VBA;宏;办公应用
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)14-20888-03
1 引言
VBA是附属在Office办公软件包中的一套程序语言,主要用于自定义应用程序中的功能,以及加强应用程序之间的互动[1]。它继承了Basic的很多特性以及优点,加快了桌面软件设计的发展。使用VBA语言不仅能够减轻办公人员的工作负担,而且还可以使Execl的大量重复性操作变得简单快捷。
VBA具有如下两个特点[1]:
(1) 编辑器中提供有大量丰富的对象,在一个工作表中就可以很方便控制其它工作表、数据表和文档,从而实现不同工作表之间的数据交流。
(2) 编辑器提供有丰富的控件和完备的语言系统,用户可以根据需求编写VBA应用程序,从而创建一个功能完备的信息管理系统。
2 背景
高校教师工资管理表中一般包括教师编号、姓名、基本工资、职位岗位补贴、应扣税金、住房补贴和应扣保险等项目内容。我们假定每位教师的应发工资=基本工资+职位岗位补贴+住房补贴-应扣税金-应扣保险,我们在Excle中分别建立了教师基本资料表、工资表等。
工资条是发放工资时交给员工的工资项目清单,其数据来源于工资表,与工资表所不同的是:每个工资条都应该包含标题以及该员工所有工资数据的详细信息。编制工资条就是在工资表中为每一位员工的工资数据加上标题,以使每一位员工拿到工资条的时候都能够清晰地看到各项工资数据所代表的含义。我们平常的做法是在每个老师的记录所在行插入一行标题,此种做法因为教工数量的增多时造成比较费时而且容易出错。因此,我们可以在Excel的基础上,利用VBA来实现自动编制工资条。
为方便各位老师查询自己的具体工资情况,建立“工资查询表”工作表,只要在查询窗口输入员工编号,就可以查询员工的详细资料及各项工资数据。
3 编程实现
3.1 工资条的实现
打开[窗体]工具栏,单击[按钮]按钮,将鼠标指针移至“工资表中”,即可添加一个窗体按钮。此时系统会自动地弹出与该窗体按钮对应的[指定宏]对话框,然后在[宏名]文本框中输入“创建工资条”,单击[指定宏]对话框中的[新建(N)]按钮进入该按钮的代码编辑窗口,然后添加如下代码:
Sub 创建工资条()
Dim i As Integer, row As Integer, col As Integer
Sheets.Add after:=Sheets("工资表")
ActiveSheet.Name = "工资条"
'在“工资表”的后面创建一个新的“工资条”工作表;
Sheets("工资表").Activate
row = Sheets("工资表").[A1].CurrentRegion.Rows.Count
col = Sheets("工资表").[A1].CurrentRegion.Columns.Count
Range(Cells(1, 1), Cells(row, col)).Copy
Sheets("工资条").Activate
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteColumnWidths, operation:=xlNone, skipblanks:=False, Transpose:=False
For i = 2 To row - 1
Cells(i*2-1,1).Select
Selection.EntireRow.Insert
Next i
Range("1:1").Copy
For i = 2 To row - 1
Cells(i*2-1,1).Select
ActiveSheet.Paste
Next i
Application.CutCopyMode = False
Range("A1").Select
End Sub
3.2 工资查询窗口的实现
第一步:在同个工作簿中新创建一个名为“工资查询表”的工作表,选择好一张合适的图片作为[工作表背景],打开VBE窗口界面,在该窗口空白处单击鼠标右键,插入并设计好一个名为“UserForm1”的用户窗体。
在用户窗体上双击“开始查询”命令按钮进入该按钮的代码编辑窗口,添加如下代码:
Private Sub CommandButton1_Click()
On Error GoTo error
id = TextBox1.Text
Sheets("基本资料表").Activate
Sname = Application.WorksheetFunction.VLookup(id, Range("A1:F18"), 2, False)
xueli = Application.WorksheetFunction.VLookup(id, Range("A1:F18"), 4, False)
Sheets("工资表").Activate
gw = Application.WorksheetFunction.VLookup(id, Range("A1:H18"), 4, False)
zf = Application.WorksheetFunction.VLookup(id, Range("A1:H18"), 5, False)
tax = Application.WorksheetFunction.VLookup(id, Range("A1:H18"), 6, False)
bx = Application.WorksheetFunction.VLookup(id, Range("A1:H18"), 7, False)
gjj = Application.WorksheetFunction.VLookup(id, Range("A1:H18"), 8, False)
UserForm1.Hide
UserForm2.Show
Exit Sub
error:
Sheets("工资查询表").Activate
MsgBox "对不起,不存在这个教工编号!"
End Sub
第二步:设计显示查询窗口界面。
在工程资源管理器的窗口的任意位置单击鼠标右键,插入一个UserForm2用户窗体,并将标题修改为“显示查询结果”,并添加一系列的“标签”、“文字框”按钮,具体见图2。
在VBE窗口界面中双击“显示查询结果”用户窗体打开UserForm2代码窗口,然后添加如下代码:
Private Sub UserForm_Activate()
Sheets("工资查询表").Activate
lid.Value = id
lname.Value = Sname
subxueli
'调用该函数
lgw.Value = " +" + Str(gw) + "元"
lzf.Value = " +" + Str(zf) + "元"
ltax.Value = " -" + Str(tax) + "元"
lbx.Value = " -" + Str(bx) + "元"
lgjj.Value = "-" + Str(gjj) + "元"
money = 600 + mxueli + gw + zf - tax - bx - gjj
lmoney.Value = Str(money) + "元"
End Sub
Sub subxueli()
Select Case xueli
Case "专科以下"
mxueli = 0
lxueli.Value = xueli + " 无学历加成"
Case "专科"
mxueli = 400
lxueli.Value = xueli + " +" + Str(mxueli) + "元"
Case "本科"
mxueli = 800
lxueli.Value = xueli + " +" + Str(mxueli) + "元"
Case "硕士"
mxueli = 1200
lxueli.Value = xueli + " +" + Str(mxueli) + "元"
Case "博士"
mxueli = 1600
lxueli.Value = xueli + " +" + Str(mxueli) + "元"
'此函数假设教师的基本工资与该员工的学历有关,学历越高其基本工资也越高。
End Select
End Sub
Private Sub CommandButton1_Click()
UserForm2.Hide
End Sub
Private Sub CommandButton2_Click()
UserForm2.Hide
UserForm1.Show
End Sub
4 结论
本模块的完成是在消化了由刘宇作者完成的编著《Excel高效办公――VBA入门与实战》的基础上,结合本单位的实际情况开发而成,在此表示感谢!作为非常流行的应用程序开发语言Visual Basic的子集,VBA具有VB语言的大多数特征和易用性,并可以将Excel作为开发平台来开发应用程序,可以应用Excel的所有功能,例如其数据处理、数据库连接、内置函数,等等,从而降低编程难度,加快了开发速度。对于我们来说,我们完全可以通过VBA来编制各类专业应用,以提高日常工作的效率。
参考文献:
[1] 刘宇. Excel高效办公――VBA入门与实战[M]. 北京:人民邮电出版社,2006.
[2] 马维峰. Excel VBA应用开发从基础到实践[M]. 北京:电子工业出版社,2007.1-30.
[3] 白金牛,王培吉. 利用VBA实现Excel的分页汇总统计[J]. 2004,(8):55-56.
[4] 何兵,侯涛. 基于VBA的Excel下教师教学工作量统计模板开发[J]. 2006,(2):23-26.
[5] 李桂英. 基于XML和VBA的《计算机应用基础》在线考试系统[J]. 2005,(219):25-28.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文