Microsoft Excel是Microsoft為使用Windows和Apple Macintosh操作系統的電腦編寫的一款電子表格軟件。直觀的界面、出色的計算功能和圖表工具,再加上成功的市場營銷,使Excel成為最流行的個人計算機數據處理軟件。 我們有一篇文章講了Excel 名稱(Name)及其 VBA 中的使用, 其實在 Excel 中還有一個更為神奇的名稱空間,這個被隱藏的名稱空間存在于 Excel 應用程序當前實例的一塊內存區域中,動態鏈接庫加載項(即 Xll)能夠在這塊區域中存儲臨時的名稱。通過這個區域,Xll 加載項甚至可以在沒有可用宏表的情況下來定義名稱。 ![]() 要操作這個隱藏名稱我們需要用到宏表函數中的 SET.NAME、GET.NAME 和 EVALUATE 這三個函數。當 SET.NAME 被應用于宏表中時,創建的名稱是工作表級別的(局部名稱),而在 Xll 中使用 SET.NAME 所定義的名稱是應用程序級別的(注意:不只是工作簿級別的,而是可用于所有工作簿的超全局名稱)并且儲存在一個隱藏的區域中。 正式以上原因使得定義在被隱藏區域的名稱有一些特殊的功能,這使得它們與標準工作簿名稱有很大的不同。這些功能我們將在后面進行說明。 一、與隱藏著的名稱相關的可用 C API 命令如下: Excel4(xlfSetName,&xResult,2,&xName,&xValue): 定義包含xValue的名稱xlName。 二、在VBA中訪問被隱藏的名稱空間 下面的語句創建一個包含字符串“OK”的名為Test的隱藏名稱: 2、獲取一個隱藏名稱所代表的內容 為了獲取名稱Test所代表的內容,使用下面的代碼: 注意,只使用名稱本身作為ExecuteExcel4Macro的參數。 3、刪除一個隱藏的名稱 為了刪除名稱Test,使用下面的語句: 注意,忽略了SET.NAME中的第二個參數。 三、被隱藏的名稱空間的特征 1、在 Excel 中的任何地方可以直接訪問這些名稱 無論在哪個工作簿中創建了這種名稱,在任何工作簿中的任何 VBA 模塊、工作表 或 宏工作表(和任何DLL加載項)中直接都能直接讀取和修改它們。 2、它生存周期和當前 Excel 會話一致 如果在工作簿Wbk1.xls中的某個VBA模塊中創建了一個名稱,然后關閉了這個工作簿,那么該名稱仍然存儲在被隱藏的命名空間中。如果接著打開另一個工作簿Wbk2.xls,那么這個工作簿的VBA過程仍能獲取和修改剛才在Wbk1.xls中所創建的名稱。在沒有被任何VBA加載項所限制的情況下,在被隱藏的名稱空間中所定義的名稱能作為永久的“公共變量”訪問。 對于這些屬于應用程序的隱藏的名稱,關閉所有工作簿和加載項不會銷毀它們。通過對SET.NAME(沒有第二個參數)明確的調用或者退出并重啟Excel,才能銷毀它們。在這種情況下,這些名稱能作為一種Excel的環境變量來使用。 3、它們是“完全隱藏的” 當一個受保護的加載項使用這個隱藏的名稱空間時, 其他的任何 VBA 模塊和用戶都不可能在不知道這個名稱空間的具體名字的情況下來讀取和使用這個名稱空間,因為沒有任何方法來列出這些被定義在隱藏命名空間中的名稱。 這些隱藏的名稱和標準的隱藏名稱(即將工作簿或工作表名稱的 Visible 屬性設置為 False)有很大的區別。標準的工作簿/表級的名稱不是被真正的被隱藏,因為它們可以通過使用 Application.Names 集合來獲取和修改,如下面的代碼所示: 上面的代碼在工作簿Wbks1.xls所有隱藏的名稱中循環并刪除它們,但是這些代碼不能發現存儲在被隱藏的命名空間中的名稱,因為這些名稱不屬于Application.Names集合,因此,它們被保護以反對任何惡意的訪問或修改。 四、具體示例 下面的代碼演示了在受保護的 VBA 加載項中隱藏著的命名空間的可能用途。它限制用戶在相同的 Excel 會話中執行加載項主過程超過3次。允許剩余執行次數的計數器沒有存儲在模塊級的變量中,也沒有存儲在依賴加載項的名稱中,而是存儲在隱藏的命名空間里。通過排除了傳統方法的下列缺點,隱藏的命名空間阻止了用戶能夠中止保護。 1、像所有變量一樣,存儲在VBA中的計數器變量能在VBE中手動清除。 2、同樣的方式,任何外部過程通過在加載項的Names集合中循環,都可以讀取、修改和可能刪除加載項中所有隱藏的或未隱藏的工作簿名稱。 但是,隱藏的命名空間避免了這些危險。它也比使用基于環境字符串的實例、臨時文件或注冊進入等方法更簡單,而且隱藏的命名空間是永久的,用戶能關閉和重新打開該工作簿而無須重新設置這個計數器。 在這個代碼中,函數 SetHName、GetHName 和 DelHName 分別可以創建、獲取和刪除隱藏的名稱,而不需要直接使用冗長的 Application.ExecuteExcel4Macro 方法來操作。代碼如下: Excel整體界面趨于平面化,顯得清新簡潔。流暢的動畫和平滑的過渡,帶來不同以往的使用體驗。 |
溫馨提示:喜歡本站的話,請收藏一下本站!