基于EXCELVBA的数据加密方法探析
2018-10-09郑宾
郑 宾
(陕西铁路工程职业技术学院,陕西 渭南 714099)
Excel是Microsoft Office家族成员中一个功能强大、技术先进、使用方便的表格式数据综合管理和分析系统[1]。Visual Basic for Application(简称VBA)是新一代标准宏语言,基于Visual Basic for Windows发展起来,支持面向对象的程序设计语言。由于它具有直接应用Office套装软件的各项强大功能,其宏记录器可以很容易将日常工作转换为VBA。
工作中经常会涉及某些Excel工作簿的数据要保密,需要对其进行加密防止某些使用者看到,以免泄露表格信息,或者用户只能查看工作表数据但不能对其操作,有时候需要操作工作簿中的某些表或工作表中的某些内容。这样,针对不同的用户或工作人员,对工作簿的使用权限不一致,可以在Excel中采用命令实现上述的某一项单一功能,但有时人工操作菜单命令可能设置不全面或有误,就可以用VBA来解决这个问题。
1 实例分析
以某单位贷款表为例,该工作表属于单位机密不应该被所有人都看到。当这个表不想让其他不相关的人打开时,可以在保存时设置加密。创建好贷款表并输入完相关数据后,单击Excel2016主菜单上的“文件”命令,在当前的界面下有一个“保护工作簿”选项,点击后,出现下拉菜单,分别是“标记为最终状态”“用密码进行加密”“保护当前工作表”“保护工作簿结构”“限制访问”“添加数字签名”。“用密码进行加密”是指当用户在打开这个贷款表时,需要输入相应密码;“保护当前工作表”则在对当前表单下的单元格数据、行列进行操作时,需要输入相应密码。
对有些需要隐藏的内容,如某一行或一列,则可以将其隐藏起来[2]。在要隐藏的行或者列上右击鼠标,在弹出的菜单中单击“隐藏”即可实现隐藏功能。如果想要撤销隐藏,可以用鼠标选中隐藏所在的间隔两行或列,右键单击“取消隐藏”,即可清除隐藏的区域。
上面的方法主要通过菜单命令完成,死板且不能很好地区分权限,通过VBA进行数据加密,灵活且效果更好。
单击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(“请输入普通权限密码”, “校验”) = "vba" Then
Sheets("Sheet1").Select
If Application.InputBox(“请输入完全权限密码”, “校验”) = "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所示。当输入错误的密码的时候会弹出提示,当3次连续输入错误的密码则自动退出[3]。
图1 打开表单提示输入密码
当输入正确的打开表单密码后,就可以打开表单并进入,此时的用户权限为查看表单内容,但不能对表单进行任何操作。进入表单时,又需要输入权限密码以区分是哪个级别的用户,先需要输入普通权限密码,如图2所示。如果普通用户密码输入正确,则又需要输入完全权限密码,如图3所示。普通用户密码输入正确而完全权限密码输入错误,则不能访问某些数据,如图4所示。只有输入完整的完全权限密码才能保证修改、查看所有数据并进行更改,如图5所示。
图2 输入普通权限密码
图3 输入完全权限密码
图4 普通权限查看信息
图5 完全权限查看信息
2 总结与提高
在实际工作中,可以设置更多道“门槛”以完全区分出每个人不同的权限。同时在输入密码对话框中,输入的密码显示为明文,使得安全性不高,这里可以自己动手在“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