朱潔蘭
摘要:該文介紹了使用ExcelVBA工具解決人力資源歷史數(shù)據(jù)保存問題的過程,首先設(shè)計了兩項程序功能,分別是保存當(dāng)前數(shù)據(jù)源為歷史數(shù)據(jù)、恢復(fù)歷史數(shù)據(jù)到當(dāng)前數(shù)據(jù)源;然后給出程序的實現(xiàn)過程詳細(xì)介紹,從導(dǎo)入數(shù)據(jù)、設(shè)計用戶界面到編碼。之后給出了程序的代碼展示。最后指出程序可改進之處是可以提供與ERP或HR系統(tǒng)是數(shù)據(jù)庫接口,并且擴展歷史數(shù)據(jù)的統(tǒng)計分析功能。
關(guān)鍵詞:人力資源;歷史數(shù)據(jù);ExcelVBA
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2015)01-0218-03
各個單位或企業(yè)的人力資源數(shù)據(jù)包括的內(nèi)容非常廣泛,涉及到勞資、人事、培訓(xùn)、社保、檔案等大量數(shù)據(jù)信息。隨著時間的增長,歷史信息不斷積累,HR部門在處理歷史數(shù)據(jù)的保存和再調(diào)用問題的時候,如果處理不當(dāng)會造成歷史數(shù)據(jù)丟失或無效,有些歷史數(shù)據(jù)即使保存了也會出現(xiàn)查找困難的情況。因為人力資源數(shù)據(jù)大部分會用Excel軟件保存和處理,作者嘗試了進行ExcelVBA編程,來解決人力資源歷史數(shù)據(jù)保存問題。
1 ExcelVBA編程簡介
VBA是擴展微軟office辦公軟件功能的編程利器,其中ExcelVBA編程最為廣泛。國內(nèi)外有很多專門討論ExcelVBA編程問題的論壇和個人網(wǎng)站。在商業(yè)化的Excel軟件培訓(xùn)中,ExcelVBA編程也是高級課程的必講內(nèi)容。
ExcelVBA是結(jié)合excel來處理一些表格數(shù)據(jù)的。它最大的優(yōu)點就是可以通過用程序代碼來控制一些有規(guī)律,重復(fù)性的需要手工來完成的工作,提高工作效率的目的。它的編程環(huán)境是內(nèi)嵌在Excel軟件之中的,只要在Excel軟件的“開發(fā)工具”菜單中調(diào)用就可以了,使用起來非??旖莘奖恪?/p>
2 程序功能結(jié)構(gòu)圖
作者在本程序中設(shè)計了兩項自動化功能。第一項是保存當(dāng)前數(shù)據(jù)源為歷史數(shù)據(jù),通過復(fù)制“數(shù)據(jù)源”工作表到新建工作表,并把新建工作表用當(dāng)前日期命名,表示新建工作表為當(dāng)前日期的歷史數(shù)據(jù),當(dāng)“數(shù)據(jù)源”工作表發(fā)生變動時,歷史數(shù)據(jù)不受影響;第二項是恢復(fù)歷史數(shù)據(jù)到當(dāng)前數(shù)據(jù)源,如果當(dāng)前數(shù)據(jù)源出錯,需要恢復(fù)到某一時刻的歷史數(shù)據(jù)時,只要輸入某一個歷史時期,就可以恢復(fù)到當(dāng)時的“源數(shù)據(jù)”。
用戶使用該Excel模板的VBA功能時,只要在發(fā)生“源數(shù)據(jù)”變動時,點擊第一項保存功能的“確定”按鈕即可,這樣就可以保存所有的變動前的歷史數(shù)據(jù)了。
3 程序?qū)崿F(xiàn)過程
3.1 導(dǎo)入數(shù)據(jù)
在Excel軟件中導(dǎo)入人力資源的數(shù)據(jù),一般會包含企業(yè)員工的姓名、性別、出生日期、年齡、入職日期、工作年限、學(xué)歷、職稱、部門、職務(wù)、工資級別等基本信息。導(dǎo)入后把當(dāng)前工作表名稱修改為“源數(shù)據(jù)”。
3.2 設(shè)計用戶界面
在Excel軟件的第一個工作表中設(shè)計用戶界面,在用戶界面中插入兩個“確定”按鈕,再分別為它們指定相應(yīng)的宏代碼,如圖1所示。
3.3 編寫代碼
本Excel模板要編寫兩個宏代碼,都是由單擊選項按鈕觸發(fā)事件過程,兩個過程的程序流程分別如下:
1) 用戶在用戶界面點擊第一項“保存當(dāng)前數(shù)據(jù)源為歷史數(shù)據(jù)”的“確定”按鈕,觸發(fā)其對應(yīng)的事件過程。
(2) 搜索已有的工作表名稱,查看是否有以當(dāng)前日期命名的工作表。如果有就刪除該工作表。
(3) 復(fù)制“源數(shù)據(jù)”工作表。
(4) 在工作簿的最后位置新建工作表,粘貼“源數(shù)據(jù)”工作表。
(5) 把新建工作表的名稱改為當(dāng)前日期。\&2. 恢復(fù)歷史數(shù)據(jù)到當(dāng)前數(shù)據(jù)源\&(6) 用戶在用戶界面點擊第二項“恢復(fù)歷史數(shù)據(jù)到當(dāng)前數(shù)據(jù)源”的“確定”按鈕,觸發(fā)其對應(yīng)的事件過程。
(7) 彈出輸入對話框,要求用戶輸入一個歷史時期。
(8) 搜索已有的工作表名稱,查看是否有以輸入的歷史日期命名的工作表。如果有就復(fù)制該工作表,如果沒有就退出程序。
(9) 粘貼到“源數(shù)據(jù)”工作表。\&]
3.4 程序代碼展示
本Excel模板的兩個宏代碼分別如下:
Sub 按鈕1_Click()
'以下定義工作表、變量的名稱
Dim newsheet_name
newsheet_name = Date
Dim n, i As Integer
n = Worksheets.Count
i = 0
' 以下刪除之前的同名工作表,不能是同一天的表
For Each Sheet In Worksheets
i = i + 1
If Sheets(i).Name = CStr(newsheet_name) Then
Worksheets(i).Delete
End If
Next
n = Worksheets.Count
'以下復(fù)制源數(shù)據(jù)表到新建工作表,并以當(dāng)天日期命名
Sheets("源數(shù)據(jù)").Select
Sheets("源數(shù)據(jù)").Copy After:=Sheets(n)
n = Worksheets.Count
Sheets(n).Name = CStr(newsheet_name)
End Sub
Sub 按鈕2_Click()
'請用戶輸入要恢復(fù)的歷史數(shù)據(jù)的時間
Dim inputsheet_name, defaulttime
defaulttime = Date
inputsheet_name = InputBox(Message, "要恢復(fù)的歷史數(shù)據(jù)的時間", defaulttime, 100, 100)
'以下定義工作表、變量的名稱
Dim n, i, m As Integer
n = Worksheets.Count
i = 1
m = 0
'以下查看輸入的日期格式是否正確,是否存在輸入日期的歷史數(shù)據(jù)
For Each Sheet In Worksheets
If Sheet.Name = inputsheet_name Then
m = i
End If
i = i + 1
Next
If m = 0 Then
MsgBox ("您輸入的日期格式不正確或者沒有這個日期的歷史數(shù)據(jù)")
Exit Sub
End If
'以下復(fù)制源數(shù)據(jù)表到新建工作表,并以當(dāng)天日期命名
Sheets(m).Select
Sheets(m).Copy After:=Sheets("源數(shù)據(jù)")
Worksheets("源數(shù)據(jù)").Delete
Sheets(2).Name = "源數(shù)據(jù)"
End Sub
4 程序的可改進之處
本程序的設(shè)計思路比較簡單,只提供了保存歷史數(shù)據(jù)和恢復(fù)歷史數(shù)據(jù)兩項功能,滿足HR部門解決歷史數(shù)據(jù)保存問題的最基本的需求。作者認(rèn)為本程序的可改進之處有兩點,一是用戶可以和本單位使用的特定的ERP或HR系統(tǒng)對接,使得系統(tǒng)導(dǎo)出的源數(shù)據(jù)一鍵保存為歷史數(shù)據(jù);二是歷史數(shù)據(jù)的統(tǒng)計分析功能可以有更深廣的擴展,借助于Excel軟件的數(shù)據(jù)統(tǒng)計功能,實現(xiàn)起來可以事半功倍。
參考文獻:
[1] 宋勇江,鞏偉.RSView32利用VBA實現(xiàn)報警歷史查詢[J].自動化技術(shù)與應(yīng)用,2014(4).
[2] ASL.數(shù)據(jù)全面保護數(shù)據(jù)備份、恢復(fù)、粉碎全接觸[J].電腦迷,2014(8).
[3] 肖紅慧,陳瓊.“一體化”理念下歷史數(shù)據(jù)開發(fā)和管理新思路[J].中國傳媒科技,2012(12).