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