摘要:編寫VBA代碼實現(xiàn)自動隱藏、顯示任意Excel文檔中的指定工作表。
關(guān)鍵詞:隱藏工作表 顯示工作表 Visible屬性 VBA代碼
日常工作中我們會接觸各種各樣的數(shù)據(jù)。隨著計算機(jī)的普及,人們都會使用這種現(xiàn)代化的工具處理數(shù)據(jù)。在計算機(jī)技術(shù)中專門有專業(yè)的數(shù)據(jù)庫軟件來管理數(shù)據(jù),這其中有IBM 的DB2、甲骨文的Oracle、微軟的SQL Server、Unix系統(tǒng)用的Informix、免費(fèi)的mySQL等等。這些都是功能強(qiáng)大并且得到用戶廣泛應(yīng)用和認(rèn)可的專業(yè)數(shù)據(jù)庫軟件。但是它們都有一個特點就是需要較長時間的學(xué)習(xí)才能掌握,這并不利用計算機(jī)水平一般又需要處理各種日常工作數(shù)據(jù)的用戶。
其實對付數(shù)據(jù)量不是非常大的日常工作,我們幾乎每個人都在用的Excel就足夠了。因此Excel成了我們?nèi)粘^k公的數(shù)據(jù)處理軟件的首選,很多中小企業(yè)的銷售、財務(wù)、庫房管理等都在使用它來完成數(shù)據(jù)的處理。但是Excel 工作表在默認(rèn)情況下是全部開放的,只要打開文件任何用戶都可以任意操作。這時如果你既要共享Excel數(shù)據(jù)分析處理的結(jié)果,又不想讓對方看見具體數(shù)據(jù),如何保密就成了問題。
例如:利用單位月費(fèi)用報銷的明細(xì)數(shù)據(jù)制作了各部門報銷費(fèi)用的比較圖,希望發(fā)給各部門查看但又不能讓對方看到具體數(shù)據(jù)項。這就需要隱藏“原始數(shù)據(jù)”所在數(shù)據(jù)表,只顯示“各部門報銷費(fèi)用比較圖”所在的數(shù)據(jù)表。
下面就這個問題給出幾種解決方法:
1 直接隱藏工作表
“右鍵單擊指定工作表標(biāo)簽”→“隱藏”,這樣重要的工作表就被隱藏起來了。雖然該方法簡單易行,但是卻存在一個致命弱點,他人只需右鍵單擊任意工作表標(biāo)簽→“取消隱藏”,就會重現(xiàn)被隱藏的工作表。
2 隱藏工作表并保護(hù)工作簿
按照上面的方法將工作表隱藏,然后通過設(shè)置“保護(hù)工作簿→結(jié)構(gòu)”(可以選擇添加口令)。這樣操作后被隱藏的工作表將無法再顯示,只能先取消“保護(hù)工作簿”才能取消隱藏。
但是這個方法也有缺點,就是當(dāng)“保護(hù)工作簿→結(jié)構(gòu)”時,對于工作表的其它操作也無法進(jìn)行,比如:插入、刪除、重命名等。
3 Visual Basic 編輯器修改屬性
3.1 “右鍵單擊工作表標(biāo)簽”→“查看代碼”,打開Visual Basic編輯器窗口,在左側(cè)可以看到“工程”和“屬性”面板。
3.2 在“工程”面板中顯示了該Excel文檔的所有工作表。選擇要隱藏的工作表,然后在“屬性”面板中設(shè)置 “Visible”的參數(shù)為2-xlSheetVeryHidden。這樣工作表就被隱藏了,而且此時“取消隱藏”功能顯示為灰色不可用。
但是別人只要知道這個方法,要顯示工作表時只要再修改屬性中“Visible ”的參數(shù)為-1- xlSheetVisible就可以了。
3.3 為了防止無權(quán)用戶的修改,我們需要設(shè)置口令。打開“Visual Basic編輯器窗口”→“工具→VBAProject屬性→保護(hù)”選項卡,勾選“查看時鎖定工程”,并設(shè)置查看工程屬性的密碼,單擊“確定”按鈕。
3.4 按下Ctrl+S保存文件,返回Excel界面并且關(guān)閉文件。下一次再打開該Excel文檔時,只要打開“Visual Basic編輯器窗口”就會立刻提示“VBAProject 密碼”,只有輸入正確密碼才能繼續(xù)操作。如此一來,即便有人知道這種操作方法,沒有密碼的話也不能顯示出隱藏的工作表,因此大大增強(qiáng)了Excel的安全性能。
注意:每個Excel文檔中必須至少有一個工作表的 Visible 屬性值為“1- xlSheetVisible”,即至少有一個工作表是顯示的。
4 VBA代碼實現(xiàn)
4.1 新建Excel文件→“右鍵單擊工作表標(biāo)簽”→查看代碼,打開“Visual Basic編輯器窗口”→工程→右鍵單擊VBAProject(book1)→插入→模塊→雙擊新建的“模塊1”→在打開的窗口填寫如下代碼。
說明:這一系列操作會生成3個宏Hide、show、showall,它們對應(yīng)的功能如下“隱藏指定工作表”、“顯示指定工作表”、“顯示全部工作表”。
這段代碼會將“password”為名稱的工作表中,A列第1-10行單元格內(nèi)容視為要被隱藏的工作表名稱,并將它們高級隱藏。
sub Hide()
For i = 1 To 10 '設(shè)定判斷1-10行
a = Sheets(\"password\").Cells(i, 1)'把Password表i行1列單元格內(nèi)容放入變量a
If a <> \"\" Then '判斷單元格為空,進(jìn)入下個單元格
Worksheets(a).Visible = 2 '設(shè)定單元格中表名稱工作表隱藏
Else '結(jié)束判斷單元格為空
End If
Next '設(shè)定i加1進(jìn)入下1行單元格
End Sub
這段代碼會將“password”為名稱的工作表中,A列第1-10行單元格內(nèi)容視為要被顯示的工作表名稱,并將它們顯示。
sub show()
For i = 1 To 10
a = Sheets(\"password\").Cells(i, 1)
If a <> \"\" Then
Worksheets(a).Visible = -1
Else
End If
Next
End Sub
這段代碼會將文檔中全部工作表顯示
Sub ShowAll()
Dim ws As Worksheet
For Each ws In Sheets
ws.Visible = -1
Next ws
End Sub
4.2 按下Ctrl+S保存文件→右鍵單擊“模塊1”→導(dǎo)出文件→指定文件名和路徑保存為.bas文件。
4.3 當(dāng)有excel文檔需要隱藏部分工作表時。“右鍵單擊工作表標(biāo)簽”→查看代碼,打開“Visual Basic編輯器窗口”→工程→右鍵單擊VBAProject(“excel文件名”)→導(dǎo)入文件→導(dǎo)入剛剛導(dǎo)出的.bas文件。這是當(dāng)前工作簿中就會有對應(yīng)的3個宏了。
4.4 在當(dāng)前文檔新建名稱為“password”的工作表,然后將要隱藏的工作表名稱填入password工作表中A列1-10行單元格。最后執(zhí)行“Hide宏”,就可以實現(xiàn)工作表隱藏了。
注意:password工作表中A列1-10行單元格填寫工作表名稱一定要和當(dāng)前Excel工作簿中表名稱完全相同,否則會導(dǎo)致代碼運(yùn)行錯誤。
以上是幾種隱藏工作表的方法,最后1種方法是使用起來最方便的。每次只需導(dǎo)入宏代碼,然后建立“password工作表”,再在A1-A10單元格中填入要隱藏的工作表名稱,最后執(zhí)行相應(yīng)的宏就完成了。
參考文獻(xiàn):
[1](美)沃肯巴赫.中文版Excel 2010高級VBA編程寶典.[M]清華大學(xué)出版社.2012-1-1.
[2]楊章偉,張婉婉.Excel VBA語法辭典.[M]機(jī)械工業(yè)出版社. 2010-1-1.
[3]為你的Excel表設(shè)置密碼.網(wǎng)絡(luò)與信息.河馬.[J]2009年第8期.