[返回]
中国计算机报1999年第49期

用VBA编程法保护Excel文档

陈翠民 王瑾荣

  VBA(Visual Basic for Application)是Excel应用程序中功能非常强大的编程语言,为了规范不同的用户对Excel应用程序的访问能力,需要对Excel文档及有关的数据进行有效的保护,笔者根据自己的体会,从以下二个方面介绍用VBA编程法实现对Excel文档的保护。


  对工作簿的保护


  1.利用VBA中Workbook对象的SaveAs方法实现对工作簿的保护,下面就对SaveAs有关的参量作一介绍:

  Filename 该字符串表示要保存的文件名。可包含完整路径。如果不指定路径, Microsoft Excel 将文件保存到当前文件夹。

  FileFormat 可选,文件的保存格式。

  Password 为一个区分大小写的字符串(不超过15个字符),用于指定文件的保护密码。

  WriteResPassword 该字符串表示文件的写保护密码。如果文件保存时带有密码,但打开文件时不输入密码,则该文件以只读模式打开。

  ReadOnlyRecommended 如果为True则在打开文件时显示一条信息,提示该文件以只读模式打开。

  下例就是在Excel应用程序中添加一工作簿,将工作簿按常规文件格式存为“C:\pj\obj\经济评价.xls”文件,并给该文件指定保护密码“12”以及写保护密码“23”。

  Sub 保护工作簿()

   NewWorkbook = Workbooks.add

   NewWorkbook.SaveAs FileName:="C:\pj\obj\经济评价.xls", FileFormat:=XlNormal, Password:="12", WriteResPassword:=″23″

  End sub

  2.利用VBA中Workbook对象的Protect方法对工作簿的结构和窗口进行保护,Workbook对象的Protect方法带有以下三个参量:

  Password 为加在工作表或工作簿上区分大小写的密码字符串。如果省略本参数,不用密码就可以取消对该工作簿的保护。否则,取消对该工作表或工作簿的保护时必须提供该密码。如果忘记了密码,就无法取消对该工作表或工作簿的保护。最好在安全的地方保存一份密码及其对应文档名的列表。

  Structure 若为True则保护工作簿结构(工作簿中工作表的相对位置)。默认值为False。

  Windows 若为True则保护工作簿窗口。

  下例就是对一名为“经济评价.xls”的工作簿实现“结构”和“窗口”保护:

  Sub 保护工作簿()

   Workbooks(″经济评价″).Protect Password:="1234", Structure:=True,Windows:=True

  End sub

  Workbook对象的Unprotect方法用于取消对工作簿的保护。Unprotect方法只有一个参量,就是保护工作表时所用的口令。

  3.对工作簿进行隐藏保护,可使他人无法看到其对应的窗口。操作方法如下:

  在VBA中使用Workbook对象下面的Windows对象的Visible属性对工作簿进行隐藏和取消隐藏,Visible属性的值可取“True”和“False”两种。

  下面程序代码完成对工作簿“book.xls”的隐藏:

  Sub 隐藏工作簿()

   Workbooks("book").Activate

   ActiveWindow.Visible = False

  End sub

  或:

  Sub 隐藏工作簿()

   Workbooks("book").Windows(1).Visible=False

  End sub


  对工作表的保护


  1.对工作表实现口令保护

  利用VBA调用Worksheet对象的Protect方法对工作表进行保护,Protect带有以下参量:

  Password 用于保护工作表的口令。

  Drawingobjects 若为True,则对工作表中的Drawingobjects对象进行保护,缺省值为True。

  Contents 若为True,则对单元格内容进行保护,缺省值为True。

  下面程序代码完成对工作表“基础数据表”的保护:

  Sub 保护工作表()

   Worksheets(″基础数据表″).Protect Password:="1234"

  End sub

  2.对工作表实现隐藏保护,使他人无法看到工作表:

  利用VBA设置Worksheet对象的Visible属性来隐藏工作表;Visible属性的值为以下三个值中的一个:

  True 工作表为显示状态。

  False 工作表为隐藏状态。

  XlVerHidden 工作表为隐藏状态,且用户不能通过“取消隐藏”对话框将其改为显示状态。当Visible的值为XlVerHidden时,只能利用VBA将其重新设置为True。

   Sub 隐藏工作表()

   Worksheets("基础数据表").Visible=False

   End sub