贊贊小屋

VBA將工作表visible屬性設定為xlSheetVeryHidden,不但隱藏還保密

Excel VBA基本概念之一為對象及屬性之間的關係。本文以工作表為例,Excel操作、VBA屬性視窗、程式碼三種方式設定Worksheets對象的name及visible屬性,執行重新命名及隱藏。

一、Excel工作表重新命名

工作表索引標籤上滑鼠右鍵就可以「重新命名」工作表,這個是很熟悉的Excel操作。

VBA將工作表visible屬性設定為xlSheetVeryHidden,不但隱藏還保密 VBA自動化 第1張

二、屬性視窗

「Alt+F11」進入VBA編輯環境,準備用VBA方式設定工作表名稱。

首先通常預設在編輯環境可以看到屬性視窗。如果沒有的話,可以在上方功能列的「檢視」選擇「屬性視窗」,快速鍵是「F4」。

VBA將工作表visible屬性設定為xlSheetVeryHidden,不但隱藏還保密 VBA自動化 第2張

三、工作表名稱屬性

VBA編輯器的左上方「專案-VBA Project」可看到基本的Excel對象結構,一個專案大致上是一個Excel檔案,裡面有「Microsoft Excel物件」和「模組」兩個資料夾,相對應的便是Excel對象和VBA對象。

專案視窗中點選「工作表1」後,左下方會出現這個對象的屬性視窗「屬性-工作表1」。視窗中列出該對象種種屬性,選取「Name」相對應的欄位內容,直接修改為「VBA重新命名」。工作表名稱以程式語言解析的話,便是工作表這個對象的一個屬性,可以把它想做是一個人的姓名。

改名後專案視窗會顯示為「工作表1(VBA重新命名)」,所以其實工作表有兩個名稱,一個VBA才看得到的「工作表1」,屬性為「(Name)」,另一個Excel看的到的「VBA重新命名」,屬性為「Name」。

VBA將工作表visible屬性設定為xlSheetVeryHidden,不但隱藏還保密 VBA自動化 第3張

四、Excel工作表隱藏

回到Excel工作表,同樣在索引標籤滑鼠右鍵,有個選項是「隱藏」,作用是將工作表隱藏。目前快捷選單中的「取消隱藏」反灰,表示無法點選。如果真的有執行隱藏,這個「取消隱藏」可以把隱藏的工作表再顯示出來。

VBA將工作表visible屬性設定為xlSheetVeryHidden,不但隱藏還保密 VBA自動化 第4張

五、 工作表Visible屬性

再進入VBA編輯環境(簡稱VBE,VBA Editor),將「工作表1」的「Visible」屬性下拉,選擇「2 – xlSheetVeryHidden」。

VBA將工作表visible屬性設定為xlSheetVeryHidden,不但隱藏還保密 VBA自動化 第5張

六、VBA工作表隱藏

回到Excel工作表,果然看不到「VBA重新命名」,而且就算滑鼠右鍵,「取消隱藏」仍然是反灰,表示在Excel是完全看不到這個工作表,如果不是自己在VBA操作隱藏的話,其他使用者可能都不知道其實還有一個工作表存在。而瞭解VBA的讀者,只要在VBA屬性視窗下拉改變「Visible」設置即可。

補充說明,上個步驟有個選項是「1 – xlSheetHidden」,它的效果跟在Excel操作隱藏一樣。在VBA設置這個選項,回到Excel仍然可以直接取消隱藏。

VBA將工作表visible屬性設定為xlSheetVeryHidden,不但隱藏還保密 VBA自動化 第6張

七、Worksheets.Visible

也可以編寫VBA程式碼控制工作表是否隱藏。

Worksheets(“VBA重新命名”).Visible = -1:將工作表對象「VBA重新命名」的屬性「Visible」設置為「-1」,表示讓工作表正常顯示。

‘Worksheets(“VBA重新命名”).Visible = xlSheetVisible:除了快速的「-1」也可以編寫屬性值全名。

程式寫好了回到Excel執行巨集,即使是「2 – xlSheetVeryHidden」照樣取消隱藏。

VBA將工作表visible屬性設定為xlSheetVeryHidden,不但隱藏還保密 VBA自動化 第7張

VBA設定對象屬性的方式保密工作表

這一節以比較熟悉的工作表作為範例介紹,相同的對象屬性操作也適用於其他對象。例如本小節第七步驟專案視窗是選擇「Module1」狀態,屬性視窗裡可以更改模組名稱。這裡同樣是「(Name)」,同樣是在Excel看不到也維護不了的名稱。

有時候因為機密緣故,會將工作表隱藏之後加密保護活頁簿,不知道密碼的人,沒辦法看到或取消隱藏特定的工作表,這一節等於是以VBA方式保密特定工作表,不熟悉VBA的人就無從得知被VeryHidden的工作表了。

本網站所有內容皆受版權保護,网站备案编号:苏ICP备14051307号-1