亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

名稱是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所示。

圖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””,””OK””)”

獲取一個(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”,”OK”)

獲取一個(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è)輸入等方法更簡(jiǎn)單,而且隱藏的名稱空間是永久的,用戶能關(guān)閉和重新打開該工作簿而無須重新設(shè)置這個(gè)計(jì)數(shù)器。

在下面的代碼中,函數(shù)SetHName、GetHName和DelHName允許創(chuàng)建、獲取和刪除隱藏的名稱,而無須直接使用冗長(zhǎ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

分享到:
標(biāo)簽:excel圖表制作 excel常用函數(shù) excel數(shù)據(jù)透視表 Excel教程
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定