鄭 賓
(陜西鐵路工程職業(yè)技術(shù)學(xué)院,陜西 渭南 714099)
Excel是Microsoft Office家族成員中一個(gè)功能強(qiáng)大、技術(shù)先進(jìn)、使用方便的表格式數(shù)據(jù)綜合管理和分析系統(tǒng)[1]。Visual Basic for Application(簡(jiǎn)稱VBA)是新一代標(biāo)準(zhǔn)宏語(yǔ)言,基于Visual Basic for Windows發(fā)展起來(lái),支持面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。由于它具有直接應(yīng)用Office套裝軟件的各項(xiàng)強(qiáng)大功能,其宏記錄器可以很容易將日常工作轉(zhuǎn)換為VBA。
工作中經(jīng)常會(huì)涉及某些Excel工作簿的數(shù)據(jù)要保密,需要對(duì)其進(jìn)行加密防止某些使用者看到,以免泄露表格信息,或者用戶只能查看工作表數(shù)據(jù)但不能對(duì)其操作,有時(shí)候需要操作工作簿中的某些表或工作表中的某些內(nèi)容。這樣,針對(duì)不同的用戶或工作人員,對(duì)工作簿的使用權(quán)限不一致,可以在Excel中采用命令實(shí)現(xiàn)上述的某一項(xiàng)單一功能,但有時(shí)人工操作菜單命令可能設(shè)置不全面或有誤,就可以用VBA來(lái)解決這個(gè)問(wèn)題。
以某單位貸款表為例,該工作表屬于單位機(jī)密不應(yīng)該被所有人都看到。當(dāng)這個(gè)表不想讓其他不相關(guān)的人打開(kāi)時(shí),可以在保存時(shí)設(shè)置加密。創(chuàng)建好貸款表并輸入完相關(guān)數(shù)據(jù)后,單擊Excel2016主菜單上的“文件”命令,在當(dāng)前的界面下有一個(gè)“保護(hù)工作簿”選項(xiàng),點(diǎn)擊后,出現(xiàn)下拉菜單,分別是“標(biāo)記為最終狀態(tài)”“用密碼進(jìn)行加密”“保護(hù)當(dāng)前工作表”“保護(hù)工作簿結(jié)構(gòu)”“限制訪問(wèn)”“添加數(shù)字簽名”?!坝妹艽a進(jìn)行加密”是指當(dāng)用戶在打開(kāi)這個(gè)貸款表時(shí),需要輸入相應(yīng)密碼;“保護(hù)當(dāng)前工作表”則在對(duì)當(dāng)前表單下的單元格數(shù)據(jù)、行列進(jìn)行操作時(shí),需要輸入相應(yīng)密碼。
對(duì)有些需要隱藏的內(nèi)容,如某一行或一列,則可以將其隱藏起來(lái)[2]。在要隱藏的行或者列上右擊鼠標(biāo),在彈出的菜單中單擊“隱藏”即可實(shí)現(xiàn)隱藏功能。如果想要撤銷隱藏,可以用鼠標(biāo)選中隱藏所在的間隔兩行或列,右鍵單擊“取消隱藏”,即可清除隱藏的區(qū)域。
上面的方法主要通過(guò)菜單命令完成,死板且不能很好地區(qū)分權(quán)限,通過(guò)VBA進(jìn)行數(shù)據(jù)加密,靈活且效果更好。
單擊Excel主菜單上的“工具>宏>Visual Basic編輯器”選項(xiàng)以打開(kāi)“Visual Basic編輯器”,編輯代碼如下所示:
Sub Auto_Open()
Dim TempI As Integer
Dim TempJ As String
Dim TempMsgBox As
VbMsgBoxResult
TempI = 1
Rem 三次密碼校驗(yàn)
Do While TempI <= 3
Sheets("Sheet1").Cells.Font.ColorIndex = 2
TempJ = InputBox(“請(qǐng)輸入讀取密碼”,“校驗(yàn)”)
Rem 判斷密碼輸入
If TempJ = "vba" Then
Exit Do
Else
TempMsgBox = MsgBox(“輸入密碼錯(cuò)誤”, vbOKOnly, “警告”)
TempI = TempI + 1
End If
Loop
If TempI = 4 Then
TempMsgBox = MsgBox(“錯(cuò)誤登陸”, vbOKOnly,“錯(cuò)誤”)
Application.Quit
ThisWorkbook.Close (False)
End If
End Sub
Private Sub Worksheet_Activate()
Dim TempMsgBox As
VbMsgBoxResult
Sheets("Sheet1").Cells.Font.ColorIndex = 2
Range("A20").Select
If Application.InputBox(“請(qǐng)輸入普通權(quán)限密碼”, “校驗(yàn)”) = "vba" Then
Sheets("Sheet1").Select
If Application.InputBox(“請(qǐng)輸入完全權(quán)限密碼”, “校驗(yàn)”) = "vba" Then
Sheets("Sheet1").Cells.Font.ColorIndex = 0
Else
Sheets("Sheet1").Cells.Font.ColorIndex = 0
Range("A1:A50").Font.ColorIndex = 2
End If
Else
TempMsgBox = MsgBox(“密碼輸入錯(cuò)誤”, vbOKOnly,“錯(cuò)誤”)
Sheets("Sheet2").Select
End If
End Sub
編輯代碼完畢后保存并退出“Visual Basic編輯器”,重新打開(kāi)表單則可以看到有自動(dòng)提示,如圖1所示。當(dāng)輸入錯(cuò)誤的密碼的時(shí)候會(huì)彈出提示,當(dāng)3次連續(xù)輸入錯(cuò)誤的密碼則自動(dòng)退出[3]。
圖1 打開(kāi)表單提示輸入密碼
當(dāng)輸入正確的打開(kāi)表單密碼后,就可以打開(kāi)表單并進(jìn)入,此時(shí)的用戶權(quán)限為查看表單內(nèi)容,但不能對(duì)表單進(jìn)行任何操作。進(jìn)入表單時(shí),又需要輸入權(quán)限密碼以區(qū)分是哪個(gè)級(jí)別的用戶,先需要輸入普通權(quán)限密碼,如圖2所示。如果普通用戶密碼輸入正確,則又需要輸入完全權(quán)限密碼,如圖3所示。普通用戶密碼輸入正確而完全權(quán)限密碼輸入錯(cuò)誤,則不能訪問(wèn)某些數(shù)據(jù),如圖4所示。只有輸入完整的完全權(quán)限密碼才能保證修改、查看所有數(shù)據(jù)并進(jìn)行更改,如圖5所示。
圖2 輸入普通權(quán)限密碼
圖3 輸入完全權(quán)限密碼
圖4 普通權(quán)限查看信息
圖5 完全權(quán)限查看信息
在實(shí)際工作中,可以設(shè)置更多道“門(mén)檻”以完全區(qū)分出每個(gè)人不同的權(quán)限。同時(shí)在輸入密碼對(duì)話框中,輸入的密碼顯示為明文,使得安全性不高,這里可以自己動(dòng)手在“Visual Basic編輯器”中新建一個(gè)窗體來(lái)做一個(gè)輸入對(duì)話框,在顯示的時(shí)候用“*”代替將要顯示的文字, 其代碼如下:
Private Sub TextBox1_Change()
Dim TempI As Integer
Dim TempValue As String
TempValue= TempValue & TextBox1.Value
For TempI=1 To Len(TempValue) Step 1
TextBox1. Value= TextBox1. Value & “*”
Next TempI
End Sub