姜彥偉
(常州工學院 計算機信息工程學院,江蘇 常州 213002)
Excel安全使用的實現與分析
姜彥偉
(常州工學院 計算機信息工程學院,江蘇 常州 213002)
Exdel的使用已相當的普遍,由于其具有易操作、易修改等特點,所以其數據很容易被修改或丟失.本文就是針對不同用戶的需要,利用VBA技術實現與分析Excel的安全使用.
VBA;對象;屬性;方法
在處理日常的一些表格數據時,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.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,則意為在過程完成后不保存工作簿.
所以通過上面的兩個參數的不同設置即可禁止文件另存也可禁止保存修改,從而達到對表格進行保護的目的.
如上只是對Excel的安全性做了部分介紹,雖然這些安全項目中有的可在Excel中的菜單中得以實現,但有時我們為用戶具有很強的個性化,往往其中的菜單也被取消,此時就只能利用VBA進行一些功能的設計,所以說在進行個性化的Excel設計中VBA編碼必不可少.
〔1〕劉模群.Visual Basic程序實用教程.電子工業出版社,2008.
〔2〕伍高遠.ExcelVBA開發技術大全.清華大學出版社,2009.
TP317.3
A
1673-260X(2010)05-0029-02