Excel安全使用的实现与分析
2010-09-01姜彦伟
姜彦伟
(常州工学院 计算机信息工程学院,江苏 常州 213002)
Excel安全使用的实现与分析
姜彦伟
(常州工学院 计算机信息工程学院,江苏 常州 213002)
Exdel的使用已相当的普遍,由于其具有易操作、易修改等特点,所以其数据很容易被修改或丢失.本文就是针对不同用户的需要,利用VBA技术实现与分析Excel的安全使用.
VBA;对象;属性;方法
1 引言
在处理日常的一些表格数据时,Exdel可能是使用最多的,范围最广的.比如学生成绩表、工资表等一些重要表格,对制表人来讲就不希望他人在某种场合下有意或无意的修改或删除.的确,Excel也提供了对表格的保护功能,但其所提供的功能过于单调或死板,比如锁定单元格,他是将整张表的所有单元格全部锁定,而不能按用户要求锁定部分单元格.所以说Exdel的保护功能缺乏灵活性.
对Exdel实现编程,利用VBA工具可能性是最有效的,也是最简单的了.VBA也是一个面向对象的程序设计,Exdel对象模型包含有Rang对象、Worksheet对象、Workbook对象、Application对象、Window对象和Chart对象.
Rang对象代表工作表的单元格或单元格区域,对Exdel中的单元格或单元格区域进行操作都需要将其设置为一个Rang对象.然后使用Rang对象的属性和方法以完成对单元格或单元格区域的操作.对单元格区域的引用可可将引用包含在引号中,也可采用如下方式引用单元格:
● [C2]:引用单元格“C2”;
● ActiveCell:引用当前单元格.
Worksheet对象是表示Exdel工作簿中的工作表,Worksheet对象是Worksheets集合的成员.在VBA中,不仅通过对Worksheets集合对象可向工作簿中增加、删除工作表,而且通过对Worksheet对象的事件可控制工作表的行为,从而达到安全使用工作表的目的.
与声明普通的变量一样可使用Dim声明对象对象类型的变量,但要求所声明的变量必须是Variant、Object或Range类型.与普通变量不同的是,必须Set语句赋值一个对象给对象变量.
2 分析与实现
2.1 单元格的选择
就整个工作表而言,有时对某些用户只要求他只能对某些单元格或单元格区域进行操作,而对该区域之外的区域禁止他选定,因此他也就不能够对这些区域进行操作,从而达到这些不可选定区域数据的安全性.
为实现上述目标,只要利用Worksheet对象的ScrollArea属性,只要在相应的过程中添加如下代码即可.
对于不连续的单元格区域上面的方法就受到限制,这时可由下面的方法实现.
当用户选取不同单元格时,可产生Selection-Change事件,该事件的语句格式是:
其中参数Target即为选择区域,用语句
可得到选定单元格的坐标,然后可用条件语句判别此单元格是否为允许选定的单元格,若不是,则可用Rang的Select方法强制选定允许选定的单元格.
2.2 工作表的删除
在一个电子簿中可能含有多张工作表,为防止他人有意或无意的删除其中的工作表,可对工作表设置删除密码,注意这里是对工作表而不是整个电子文档文件.
这一技术的实现并不难.因为,删除一个工作表是利用了Worksheet对象的Delete方法,只要在删除前有一段密码判别语句即可.具体的删除语句可由下面语句实现:
Application.displayAlerts=False ‘删除工作表警告提示取消
2.3 根据密码打开工作簿
设置密码可能是对工作簿最安全的做法.做为使用者来讲,当然是希望在打开工作簿时先验证密码的正确与否?对非法用户当然禁止打开该工作簿.
其方法是在VBE的环境下添加一个窗口,此窗口即为登录窗口,假设名称为FrmPass,然后在工作簿的打开事件下打开此窗口,即编写如下程序段:
关于登录窗口设计属于常规设计,此不在赘述.
上面的方法是设计应用程序常规的登录方法,其实,完全可以利用VBA中提供的工作簿的密码设置功能,其方法是利用Workbook对象的Pass-Word属性即可很方便的进行设置,具体方法如下:
要取消密码只要将上面代码中的密码设为空即可.
2.4 工作表的隐藏
有时在一个工作簿被打开的前提下,在某种特定的条件下,不希望某些表中的数据被他人看到,这时当然可将这些通过某些组合键将表隐藏起来,这只要在键盘被按下的事件中编写相应的代码即可.主要代码如下:
其中的常量如下:
● XlSheetHidden:隐藏工作表,用户可通过菜单取消隐藏.
● XlSheetVeryHidden:隐藏工作表,用户不能通过菜单取消隐藏,只能通过VBA代码取消隐藏.
● XlsheetVisual:显示工作表
2.5 限制保存工作簿
有时为限制他人恶意打开工作表并修改表格中的数据,也可通过禁止对其修改过的工作簿进行保存的办法达到对数据的安全保护.
要达到此目的,只要注意当工作表保存前引发Workbook对象的BeforeSave事件,其事件过程的结构为:
在这个过程中有两个参数SaveAsUI与Cancel其含义如下:
● SaveAsUI:如果要显示“另存为”对话框,则将其设为True
● Cancel:如果在上面的过程中将此参数设为True,则意为在过程完成后不保存工作簿.
所以通过上面的两个参数的不同设置即可禁止文件另存也可禁止保存修改,从而达到对表格进行保护的目的.
3 结束语
如上只是对Excel的安全性做了部分介绍,虽然这些安全项目中有的可在Excel中的菜单中得以实现,但有时我们为用户具有很强的个性化,往往其中的菜单也被取消,此时就只能利用VBA进行一些功能的设计,所以说在进行个性化的Excel设计中VBA编码必不可少.
〔1〕刘模群.Visual Basic程序实用教程.电子工业出版社,2008.
〔2〕伍高远.ExcelVBA开发技术大全.清华大学出版社,2009.
TP317.3
A
1673-260X(2010)05-0029-02