姜彥偉
(常州工學(xué)院 計(jì)算機(jī)信息工程學(xué)院,江蘇 常州 213002)
Excel安全使用的實(shí)現(xiàn)與分析
姜彥偉
(常州工學(xué)院 計(jì)算機(jī)信息工程學(xué)院,江蘇 常州 213002)
Exdel的使用已相當(dāng)?shù)钠毡?,由于其具有易操作、易修改等特點(diǎn),所以其數(shù)據(jù)很容易被修改或丟失.本文就是針對(duì)不同用戶的需要,利用VBA技術(shù)實(shí)現(xiàn)與分析Excel的安全使用.
VBA;對(duì)象;屬性;方法
在處理日常的一些表格數(shù)據(jù)時(shí),Exdel可能是使用最多的,范圍最廣的.比如學(xué)生成績(jī)表、工資表等一些重要表格,對(duì)制表人來(lái)講就不希望他人在某種場(chǎng)合下有意或無(wú)意的修改或刪除.的確,Excel也提供了對(duì)表格的保護(hù)功能,但其所提供的功能過(guò)于單調(diào)或死板,比如鎖定單元格,他是將整張表的所有單元格全部鎖定,而不能按用戶要求鎖定部分單元格.所以說(shuō)Exdel的保護(hù)功能缺乏靈活性.
對(duì)Exdel實(shí)現(xiàn)編程,利用VBA工具可能性是最有效的,也是最簡(jiǎn)單的了.VBA也是一個(gè)面向?qū)ο蟮某绦蛟O(shè)計(jì),Exdel對(duì)象模型包含有Rang對(duì)象、Worksheet對(duì)象、Workbook對(duì)象、Application對(duì)象、Window對(duì)象和Chart對(duì)象.
Rang對(duì)象代表工作表的單元格或單元格區(qū)域,對(duì)Exdel中的單元格或單元格區(qū)域進(jìn)行操作都需要將其設(shè)置為一個(gè)Rang對(duì)象.然后使用Rang對(duì)象的屬性和方法以完成對(duì)單元格或單元格區(qū)域的操作.對(duì)單元格區(qū)域的引用可可將引用包含在引號(hào)中,也可采用如下方式引用單元格:
● [C2]:引用單元格“C2”;
● ActiveCell:引用當(dāng)前單元格.
Worksheet對(duì)象是表示Exdel工作簿中的工作表,Worksheet對(duì)象是Worksheets集合的成員.在VBA中,不僅通過(guò)對(duì)Worksheets集合對(duì)象可向工作簿中增加、刪除工作表,而且通過(guò)對(duì)Worksheet對(duì)象的事件可控制工作表的行為,從而達(dá)到安全使用工作表的目的.
與聲明普通的變量一樣可使用Dim聲明對(duì)象對(duì)象類(lèi)型的變量,但要求所聲明的變量必須是Variant、Object或Range類(lèi)型.與普通變量不同的是,必須Set語(yǔ)句賦值一個(gè)對(duì)象給對(duì)象變量.
2.1 單元格的選擇
就整個(gè)工作表而言,有時(shí)對(duì)某些用戶只要求他只能對(duì)某些單元格或單元格區(qū)域進(jìn)行操作,而對(duì)該區(qū)域之外的區(qū)域禁止他選定,因此他也就不能夠?qū)@些區(qū)域進(jìn)行操作,從而達(dá)到這些不可選定區(qū)域數(shù)據(jù)的安全性.
為實(shí)現(xiàn)上述目標(biāo),只要利用Worksheet對(duì)象的ScrollArea屬性,只要在相應(yīng)的過(guò)程中添加如下代碼即可.
對(duì)于不連續(xù)的單元格區(qū)域上面的方法就受到限制,這時(shí)可由下面的方法實(shí)現(xiàn).
當(dāng)用戶選取不同單元格時(shí),可產(chǎn)生Selection-Change事件,該事件的語(yǔ)句格式是:
其中參數(shù)Target即為選擇區(qū)域,用語(yǔ)句
可得到選定單元格的坐標(biāo),然后可用條件語(yǔ)句判別此單元格是否為允許選定的單元格,若不是,則可用Rang的Select方法強(qiáng)制選定允許選定的單元格.
2.2 工作表的刪除
在一個(gè)電子簿中可能含有多張工作表,為防止他人有意或無(wú)意的刪除其中的工作表,可對(duì)工作表設(shè)置刪除密碼,注意這里是對(duì)工作表而不是整個(gè)電子文檔文件.
這一技術(shù)的實(shí)現(xiàn)并不難.因?yàn)?,刪除一個(gè)工作表是利用了Worksheet對(duì)象的Delete方法,只要在刪除前有一段密碼判別語(yǔ)句即可.具體的刪除語(yǔ)句可由下面語(yǔ)句實(shí)現(xiàn):
Application.displayAlerts=False ‘刪除工作表警告提示取消
2.3 根據(jù)密碼打開(kāi)工作簿
設(shè)置密碼可能是對(duì)工作簿最安全的做法.做為使用者來(lái)講,當(dāng)然是希望在打開(kāi)工作簿時(shí)先驗(yàn)證密碼的正確與否?對(duì)非法用戶當(dāng)然禁止打開(kāi)該工作簿.
其方法是在VBE的環(huán)境下添加一個(gè)窗口,此窗口即為登錄窗口,假設(shè)名稱為FrmPass,然后在工作簿的打開(kāi)事件下打開(kāi)此窗口,即編寫(xiě)如下程序段:
關(guān)于登錄窗口設(shè)計(jì)屬于常規(guī)設(shè)計(jì),此不在贅述.
上面的方法是設(shè)計(jì)應(yīng)用程序常規(guī)的登錄方法,其實(shí),完全可以利用VBA中提供的工作簿的密碼設(shè)置功能,其方法是利用Workbook對(duì)象的Pass-Word屬性即可很方便的進(jìn)行設(shè)置,具體方法如下:
要取消密碼只要將上面代碼中的密碼設(shè)為空即可.
2.4 工作表的隱藏
有時(shí)在一個(gè)工作簿被打開(kāi)的前提下,在某種特定的條件下,不希望某些表中的數(shù)據(jù)被他人看到,這時(shí)當(dāng)然可將這些通過(guò)某些組合鍵將表隱藏起來(lái),這只要在鍵盤(pán)被按下的事件中編寫(xiě)相應(yīng)的代碼即可.主要代碼如下:
其中的常量如下:
● XlSheetHidden:隱藏工作表,用戶可通過(guò)菜單取消隱藏.
● XlSheetVeryHidden:隱藏工作表,用戶不能通過(guò)菜單取消隱藏,只能通過(guò)VBA代碼取消隱藏.
● XlsheetVisual:顯示工作表
2.5 限制保存工作簿
有時(shí)為限制他人惡意打開(kāi)工作表并修改表格中的數(shù)據(jù),也可通過(guò)禁止對(duì)其修改過(guò)的工作簿進(jìn)行保存的辦法達(dá)到對(duì)數(shù)據(jù)的安全保護(hù).
要達(dá)到此目的,只要注意當(dāng)工作表保存前引發(fā)Workbook對(duì)象的BeforeSave事件,其事件過(guò)程的結(jié)構(gòu)為:
在這個(gè)過(guò)程中有兩個(gè)參數(shù)SaveAsUI與Cancel其含義如下:
● SaveAsUI:如果要顯示“另存為”對(duì)話框,則將其設(shè)為T(mén)rue
● Cancel:如果在上面的過(guò)程中將此參數(shù)設(shè)為T(mén)rue,則意為在過(guò)程完成后不保存工作簿.
所以通過(guò)上面的兩個(gè)參數(shù)的不同設(shè)置即可禁止文件另存也可禁止保存修改,從而達(dá)到對(duì)表格進(jìn)行保護(hù)的目的.
如上只是對(duì)Excel的安全性做了部分介紹,雖然這些安全項(xiàng)目中有的可在Excel中的菜單中得以實(shí)現(xiàn),但有時(shí)我們?yōu)橛脩艟哂泻軓?qiáng)的個(gè)性化,往往其中的菜單也被取消,此時(shí)就只能利用VBA進(jìn)行一些功能的設(shè)計(jì),所以說(shuō)在進(jìn)行個(gè)性化的Excel設(shè)計(jì)中VBA編碼必不可少.
〔1〕劉模群.Visual Basic程序?qū)嵱媒坛?電子工業(yè)出版社,2008.
〔2〕伍高遠(yuǎn).ExcelVBA開(kāi)發(fā)技術(shù)大全.清華大學(xué)出版社,2009.
TP317.3
A
1673-260X(2010)05-0029-02