摘要:本文通過利用Excel內(nèi)嵌的VBA編程語言和Excel的宏功能相結(jié)合,實(shí)現(xiàn)了Excel下工資條的制作與工資查詢窗口的建立。
關(guān)鍵詞:VBA;宏;辦公應(yīng)用
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)14-20888-03
1 引言
VBA是附屬在Office辦公軟件包中的一套程序語言,主要用于自定義應(yīng)用程序中的功能,以及加強(qiáng)應(yīng)用程序之間的互動(dòng)[1]。它繼承了Basic的很多特性以及優(yōu)點(diǎn),加快了桌面軟件設(shè)計(jì)的發(fā)展。使用VBA語言不僅能夠減輕辦公人員的工作負(fù)擔(dān),而且還可以使Execl的大量重復(fù)性操作變得簡(jiǎn)單快捷。
VBA具有如下兩個(gè)特點(diǎn)[1]:
(1) 編輯器中提供有大量豐富的對(duì)象,在一個(gè)工作表中就可以很方便控制其它工作表、數(shù)據(jù)表和文檔,從而實(shí)現(xiàn)不同工作表之間的數(shù)據(jù)交流。
(2) 編輯器提供有豐富的控件和完備的語言系統(tǒng),用戶可以根據(jù)需求編寫VBA應(yīng)用程序,從而創(chuàng)建一個(gè)功能完備的信息管理系統(tǒng)。
2 背景
高校教師工資管理表中一般包括教師編號(hào)、姓名、基本工資、職位崗位補(bǔ)貼、應(yīng)扣稅金、住房補(bǔ)貼和應(yīng)扣保險(xiǎn)等項(xiàng)目內(nèi)容。我們假定每位教師的應(yīng)發(fā)工資=基本工資+職位崗位補(bǔ)貼+住房補(bǔ)貼-應(yīng)扣稅金-應(yīng)扣保險(xiǎn),我們?cè)贓xcle中分別建立了教師基本資料表、工資表等。
工資條是發(fā)放工資時(shí)交給員工的工資項(xiàng)目清單,其數(shù)據(jù)來源于工資表,與工資表所不同的是:每個(gè)工資條都應(yīng)該包含標(biāo)題以及該員工所有工資數(shù)據(jù)的詳細(xì)信息。編制工資條就是在工資表中為每一位員工的工資數(shù)據(jù)加上標(biāo)題,以使每一位員工拿到工資條的時(shí)候都能夠清晰地看到各項(xiàng)工資數(shù)據(jù)所代表的含義。我們平常的做法是在每個(gè)老師的記錄所在行插入一行標(biāo)題,此種做法因?yàn)榻坦?shù)量的增多時(shí)造成比較費(fèi)時(shí)而且容易出錯(cuò)。因此,我們可以在Excel的基礎(chǔ)上,利用VBA來實(shí)現(xiàn)自動(dòng)編制工資條。
為方便各位老師查詢自己的具體工資情況,建立“工資查詢表”工作表,只要在查詢窗口輸入員工編號(hào),就可以查詢員工的詳細(xì)資料及各項(xiàng)工資數(shù)據(jù)。
3 編程實(shí)現(xiàn)
3.1 工資條的實(shí)現(xiàn)
打開[窗體]工具欄,單擊[按鈕]按鈕,將鼠標(biāo)指針移至“工資表中”,即可添加一個(gè)窗體按鈕。此時(shí)系統(tǒng)會(huì)自動(dòng)地彈出與該窗體按鈕對(duì)應(yīng)的[指定宏]對(duì)話框,然后在[宏名]文本框中輸入“創(chuàng)建工資條”,單擊[指定宏]對(duì)話框中的[新建(N)]按鈕進(jìn)入該按鈕的代碼編輯窗口,然后添加如下代碼:
Sub 創(chuàng)建工資條()
Dim i As Integer, row As Integer, col As Integer
Sheets.Add after:=Sheets(\"工資表\")
ActiveSheet.Name = \"工資條\"
'在“工資表”的后面創(chuàng)建一個(gè)新的“工資條”工作表;
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 工資查詢窗口的實(shí)現(xiàn)
第一步:在同個(gè)工作簿中新創(chuàng)建一個(gè)名為“工資查詢表”的工作表,選擇好一張合適的圖片作為[工作表背景],打開VBE窗口界面,在該窗口空白處單擊鼠標(biāo)右鍵,插入并設(shè)計(jì)好一個(gè)名為“UserForm1”的用戶窗體。
在用戶窗體上雙擊“開始查詢”命令按鈕進(jìn)入該按鈕的代碼編輯窗口,添加如下代碼:
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 \"對(duì)不起,不存在這個(gè)教工編號(hào)!\"
End Sub
第二步:設(shè)計(jì)顯示查詢窗口界面。
在工程資源管理器的窗口的任意位置單擊鼠標(biāo)右鍵,插入一個(gè)UserForm2用戶窗體,并將標(biāo)題修改為“顯示查詢結(jié)果”,并添加一系列的“標(biāo)簽”、“文字框”按鈕,具體見圖2。
在VBE窗口界面中雙擊“顯示查詢結(jié)果”用戶窗體打開UserForm2代碼窗口,然后添加如下代碼:
Private Sub UserForm_Activate()
Sheets(\"工資查詢表\").Activate
lid.Value = id
lname.Value = Sname
subxueli
'調(diào)用該函數(shù)
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 + \" 無學(xué)歷加成\"
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) + \"元\"
'此函數(shù)假設(shè)教師的基本工資與該員工的學(xué)歷有關(guān),學(xué)歷越高其基本工資也越高。
End Select
End Sub
Private Sub CommandButton1_Click()
UserForm2.Hide
End Sub
Private Sub CommandButton2_Click()
UserForm2.Hide
UserForm1.Show
End Sub
4 結(jié)論
本模塊的完成是在消化了由劉宇作者完成的編著《Excel高效辦公——VBA入門與實(shí)戰(zhàn)》的基礎(chǔ)上,結(jié)合本單位的實(shí)際情況開發(fā)而成,在此表示感謝!作為非常流行的應(yīng)用程序開發(fā)語言Visual Basic的子集,VBA具有VB語言的大多數(shù)特征和易用性,并可以將Excel作為開發(fā)平臺(tái)來開發(fā)應(yīng)用程序,可以應(yīng)用Excel的所有功能,例如其數(shù)據(jù)處理、數(shù)據(jù)庫連接、內(nèi)置函數(shù),等等,從而降低編程難度,加快了開發(fā)速度。對(duì)于我們來說,我們完全可以通過VBA來編制各類專業(yè)應(yīng)用,以提高日常工作的效率。
參考文獻(xiàn):
[1] 劉宇. Excel高效辦公——VBA入門與實(shí)戰(zhàn)[M]. 北京:人民郵電出版社,2006.
[2] 馬維峰. Excel VBA應(yīng)用開發(fā)從基礎(chǔ)到實(shí)踐[M]. 北京:電子工業(yè)出版社,2007.1-30.
[3] 白金牛,王培吉. 利用VBA實(shí)現(xiàn)Excel的分頁匯總統(tǒng)計(jì)[J]. 2004,(8):55-56.
[4] 何兵,侯濤. 基于VBA的Excel下教師教學(xué)工作量統(tǒng)計(jì)模板開發(fā)[J]. 2006,(2):23-26.
[5] 李桂英. 基于XML和VBA的《計(jì)算機(jī)應(yīng)用基礎(chǔ)》在線考試系統(tǒng)[J]. 2005,(219):25-28.
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文