excel表格名稱的秘密

      網(wǎng)友投稿 588 2025-03-31

      excel表格名稱的秘密


      名稱是Excel中的一項(xiàng)強(qiáng)大功能,無論是在公式中還是在VBA中運(yùn)用名稱,都能帶來極大的便利。

      本文主要談?wù)勗贓xcel中不被注意到的一些名稱的使用。

      Excel內(nèi)置的名稱

      Excel有一些內(nèi)置的名稱,它們會(huì)在特定的環(huán)境下自動(dòng)使用。

      例如,設(shè)置打印區(qū)域后,Excel會(huì)自動(dòng)命名打印區(qū)域?yàn)镻rint_Area,如下圖1所示。

      圖1

      如果設(shè)置打印標(biāo)題,則Excel會(huì)創(chuàng)建名稱Print_Titles。

      又如,在使用高級(jí)篩選獲取不重復(fù)值列表時(shí),Excel會(huì)自動(dòng)創(chuàng)建名稱Extract,如圖2所示。

      圖2

      如果在使用高級(jí)篩選時(shí),使用了條件,除了名稱Extract外,Excel還會(huì)自動(dòng)將條件區(qū)域命名為Criteria,如圖3所示。

      圖3

      Excel還有其它一些內(nèi)置名稱,例如:Consolidate_Area、Database、FilterDatabase、Sheet_Title,等等。

      因此,在VBA代碼中,如果出現(xiàn)了上述名稱,你不必感到奇怪。例如,下面的語句刪除當(dāng)前工作表中已經(jīng)設(shè)置的打印區(qū)域:

      ActiveSheet.Names(“Print_Area”).Delete

      在《經(jīng)典代碼解析5:查找并顯示部分匹配的數(shù)據(jù)》中,VBA代碼將名稱“Extract”定義為常量,在篩選完成后,再將該名稱代表的區(qū)域刪除,即作為臨時(shí)數(shù)據(jù)區(qū)域。

      Excel中隱藏的名稱空間

      認(rèn)識(shí)Excel隱藏的名稱空間

      Excel隱藏的名稱空間是一個(gè)屬于當(dāng)前Excel實(shí)例的內(nèi)存區(qū)域,該區(qū)域加載項(xiàng)DLLS(“XLLS”)能夠存儲(chǔ)臨時(shí)的名稱。使用這個(gè)區(qū)域,即便沒有可利用的宏工作表,XLLs也能夠定義名稱。

      隱藏著的名稱操作基于XLM函數(shù)SET.NAME、GET.NAME和EVALUATE。當(dāng)在XLM宏工作表中使用時(shí),SET.NAME定義一個(gè)標(biāo)準(zhǔn)的工作表級(jí)名稱;當(dāng)它在XLL中被調(diào)用時(shí),創(chuàng)建一個(gè)應(yīng)用程序級(jí)名稱并且將其存儲(chǔ)在一個(gè)被隱藏的區(qū)域中。

      與隱藏著的名稱相關(guān)的可用的C API命令如下:

      Excel4(xlfSetName,&xResult,2,&xName,&xValue);

      定義包含xValue的名稱xlName。

      Excel4(xlfGetName,&xResult,1,&xName);

      獲取xlName的定義(例如,“=1”),并將其存儲(chǔ)在xResult中。

      Excel4(xlfEvaluate,&xResult,1,&xName);

      獲取xlName的內(nèi)容(例如,1)并將其存儲(chǔ)在xResult中。

      Excel4(xlfSetName,&xResult,1,&xName);

      刪除xlName(忽略第二個(gè)參數(shù))。

      定義在隱藏區(qū)域的名稱有一些特殊功能,這使得它們與標(biāo)準(zhǔn)工作簿名稱有很大的不同。

      隱藏的名稱空間的特征

      在隱藏的名稱空間中所定義的名稱不屬于任何工作簿,而屬于應(yīng)用程序本身。

      在Excel的任何地方可以直接訪問這些名稱。無論在哪個(gè)工作簿中創(chuàng)建了這個(gè)名稱,在任何工作簿中的任何VBA模塊、工作表或宏工作表(和任何DLL加載項(xiàng))中都能直接讀取和修改它們。

      隱藏的名稱的“生存時(shí)間”與當(dāng)前Excel會(huì)話一致。

      如果你在工作簿W(wǎng)B1.xlsx中某個(gè)VBA模塊中創(chuàng)建了一個(gè)名稱,然后關(guān)閉了這個(gè)工作簿,那么該名稱仍然存儲(chǔ)在隱藏的命名空間中。如果你接著打開另一個(gè)工作簿W(wǎng)B2.xlsx,那么該工作簿的VBA過程仍能獲取和修改這個(gè)隱藏的名稱,即便它是在WB1.xls中所創(chuàng)建的。如果沒有被任何VBA加載項(xiàng)所限制的話,那么在隱藏的名稱空間中所定義的名稱能被用作永久的“公共變量”訪問。

      對(duì)于這些屬于應(yīng)用程序的隱藏的名稱,關(guān)閉所有工作簿和加載項(xiàng)不會(huì)銷毀它們。它們僅能通過對(duì)SET.NAME(如果沒有第二個(gè)參數(shù))明確的調(diào)用或者通過退出并重啟Excel被銷毀。在這種情況下,這些名稱能被用作一種Excel的環(huán)境變量。

      它們是完全隱藏的。當(dāng)一個(gè)受保護(hù)的加載項(xiàng)使用這個(gè)隱藏的名稱空間時(shí),新的名稱不能被任何其它的VBA模塊讀取,也不能被用戶讀取,除非他們知道它們的身份證書。沒有方法“列出”定義在隱藏命名空間中的名稱。

      這些名稱無須與標(biāo)準(zhǔn)的隱藏名稱(工作簿或工作表名稱的.Visible屬性已設(shè)置為False)混淆。標(biāo)準(zhǔn)的工作簿級(jí)的名稱決不會(huì)真正的被隱藏,因?yàn)樗鼈兡芡ㄟ^使用Application.Names集合的任何VBA程序來獲取和修改,如下面的代碼所示:

      Dim CName As Name

      For Each CName In Workbooks(“WB1.xlsm”).Names

      If CName.Hidden Then

      MsgBox CName.Name & ” 被刪除”

      CName.Delete

      End If

      Next CName

      上面的代碼,在工作簿W(wǎng)B1.xlsm的所有名稱中循環(huán),并刪除它們中隱藏的名稱。然而,這些代碼不能發(fā)現(xiàn)存儲(chǔ)在隱藏名稱空間中的名稱,因?yàn)檫@些名稱不屬于Application.Names集合。因此,它們被保護(hù)以反對(duì)任何惡意的訪問或修改。

      在VBA中訪問隱藏的名稱空間

      創(chuàng)建一個(gè)隱藏的名稱

      下面的語句創(chuàng)建一個(gè)包含字符串“OK”的名為Test的隱藏的名稱:

      Application.ExecuteExcel4Macro”SET.NAME(“”Test””,””O(jiān)K””)”

      獲取一個(gè)隱藏名稱的內(nèi)容

      下面的語句獲取名稱“Test”所代表的內(nèi)容:

      TestVal = Application.ExecuteExcel4Macro(“Test”)

      只是使用名稱本身作為ExecuteExcel4Macro的參數(shù)。

      刪除一個(gè)隱藏的名稱

      下面的語句刪除名稱“Test”:

      Application.ExecuteExcel4Macro”SET.NAME(“”Test””)”

      忽略了SET.NAME的第二個(gè)參數(shù)。

      在工作表中訪問隱藏的名稱空間

      在工作表中也可以直接訪問隱藏的名稱,必須使用SET.NAME和EVALUATE與CALL()和API函數(shù)Excel4組合在一起。函數(shù)SET.NAME和EVALUATE的編號(hào)分別是88和257。

      創(chuàng)建一個(gè)隱藏的名稱

      下面創(chuàng)建一個(gè)包含字符串“OK”的名為Test的隱藏的名稱:

      =CALL(“Xlcall32″,”Excel4″,”2JRJRR#”,88,,2,”Test”,”O(jiān)K”)

      獲取一個(gè)隱藏名稱的內(nèi)容

      下面獲取名為“Test”的名稱的內(nèi)容:

      =CALL(“Xlcall32″,”Excel4″,”2JRJR#”,257,,1,”Test”)

      刪除一個(gè)隱藏名稱

      下面刪除名稱“Test”:

      =CALL(“Xlcall32″,”Excel4″,”2JRJRR#”,88,,1,”Test”)

      在工作表公式中直接定義和刪除名稱是可能的,因?yàn)镾ET.NAME不是一個(gè)命令而是一個(gè)宏函數(shù)。

      在宏工作表中能以相同的方式使用隱藏的名稱,除了不需要給類型字符串添加數(shù)字標(biāo)志外。

      示例

      下面的代碼演示了在受保護(hù)的VBA加載項(xiàng)中隱藏的名稱空間的可能的用途。

      它限制用戶在相同的Excel會(huì)話中執(zhí)行加載項(xiàng)主過程超過3次。沒有在一個(gè)模塊級(jí)的變量中存儲(chǔ)允許剩余執(zhí)行的計(jì)數(shù)器,也沒有將其存儲(chǔ)在依賴加載項(xiàng)的名稱中,而是存儲(chǔ)在這個(gè)隱藏的命名空間中。

      使用名稱空間阻止用戶中斷保護(hù),修復(fù)了傳統(tǒng)方法的下列缺點(diǎn):

      像所有變量一樣,存儲(chǔ)在VBA中的計(jì)數(shù)器可以在VBE中手工清除。

      同樣,任何外部子過程遍歷加載項(xiàng)的Names集合,可以讀取、修改和刪除中所有隱藏的或者未隱藏的工作簿名稱。

      隱藏的名稱空間避免了這些危險(xiǎn),它也比基于環(huán)境字符串的實(shí)例、臨時(shí)文件或注冊(cè)輸入等方法更簡單,而且隱藏的名稱空間是永久的,用戶能關(guān)閉和重新打開該工作簿而無須重新設(shè)置這個(gè)計(jì)數(shù)器。

      在下面的代碼中,函數(shù)SetHName、GetHName和DelHName允許創(chuàng)建、獲取和刪除隱藏的名稱,而無須直接使用冗長的Application.ExecuteExcel4Macro方法。

      Sub Main()

      Application.EnableCancelKey = xlDisabled

      Dim Count

      Count = GetHName(“TswbkCount”)

      If IsError(Count) Then

      SetHName “TswbkCount”, 3

      ElseIf Count = 1 Then

      MsgBox “宏被禁止. 你必須重新啟動(dòng)Excel.”, vbInformation

      Else

      SetHName “TswbkCount”, Count – 1

      End If

      End Sub

      Sub SetHName(Name As String, Value)

      Application.ExecuteExcel4Macro _

      “SET.NAME(“”” & Name &”””,” & Value & “)”

      End Sub

      Function GetHName(Name As String)

      GetHName = Application.ExecuteExcel4Macro(Name)

      End Function

      Sub DelHName(Name As String)

      Application.ExecuteExcel4Macro”SET.NAME(“”” & Name & “””)”

      End Sub

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Excel 將兩個(gè)日期間隔的天數(shù)折合成年月零多少天的形式(excel表格)
      下一篇:詳細(xì)解釋Excel2003單元格換行
      相關(guān)文章
      亚洲日韩一页精品发布| 亚洲蜜芽在线精品一区| 亚洲色欲色欲www在线播放| 亚洲精品天天影视综合网| 国产亚洲一区二区手机在线观看| 久久精品国产亚洲综合色| 亚洲精品无码专区2| 日韩亚洲综合精品国产| 朝桐光亚洲专区在线中文字幕 | 亚洲AV无码乱码在线观看代蜜桃| 亚洲精品视频久久| 亚洲免费在线视频播放| 亚洲国产精品成人综合久久久| 亚洲成人黄色在线观看| 亚洲一级免费毛片| 亚洲伦理中文字幕| 亚洲一久久久久久久久| 亚洲国产成人手机在线观看| 亚洲а∨精品天堂在线| 国产亚洲精品美女久久久久| 亚洲电影日韩精品 | 亚洲人成色在线观看| 亚洲AV无码一区二区三区久久精品 | 国产亚洲视频在线观看网址| 午夜亚洲av永久无码精品| 亚洲精品色婷婷在线影院| 一本色道久久综合亚洲精品| 亚洲精品国产精品乱码在线观看| 国产亚洲综合久久系列| 久久亚洲精品成人AV| 亚洲一区二区三区精品视频 | 亚洲一区二区三区在线观看精品中文 | 亚洲片一区二区三区| 不卡一卡二卡三亚洲| 日本亚洲成高清一区二区三区| 亚洲AV乱码一区二区三区林ゆな| 777亚洲精品乱码久久久久久 | 国产成人亚洲综合无码| 亚洲国产精品成人精品无码区在线| 亚洲国产精品lv| 亚洲一区精品视频在线|