C:\Documents And Settings\username\Application Data\Microsoft\Templates
就這么簡單!關(guān)閉該文件。
接著,單擊“Office菜單——新建”,在“我的模板”中選擇并打開剛保存的文件。文件打開后,看起來像保存時的樣子,但注意到應(yīng)用程序標(biāo)題欄中文件的名字,在模板文件名后自動添加了數(shù)字1,并且沒有擴(kuò)展名。如果此時再以該模板新建文字,添加的數(shù)字將遞增。
實(shí)際上,因?yàn)樵撐募€沒有保存,所以缺少擴(kuò)展名。一旦單擊“保存”按鈕,就會提示輸入文件名和選擇類型。該文件不會覆蓋模板文件。
由于能夠?qū)⒛0宕鎯υ谟脩糇砸训哪0迥夸浝锘蛘呔W(wǎng)絡(luò)目錄里,所以可以容易地發(fā)布和更新工作簿模板,確保都從模板中創(chuàng)建所有的新文件。
然而,如果模板使用了VBA,那么要保證在基于該模板創(chuàng)建的文件中VBA仍然起作用,必須保存為啟用宏的工作簿,否則會刪除VBA代碼。
創(chuàng)建和部署加載項
加載項將數(shù)據(jù)與代碼分離,并且加載項能夠使定制對所有的文件都可見并可訪問。
下面,以前面文章中的示例dynamicMenu-CreateFromTemplate.xlsm來介紹Excel中加載項的構(gòu)建。
當(dāng)準(zhǔn)備轉(zhuǎn)換某文件為加載項時,確保所有的VBA代碼無縫地轉(zhuǎn)移。如果文件中含有VBA代碼,那么需要檢查代碼中ThisWorkbook的引用,以及子過程和函數(shù)前面沒有加上關(guān)鍵字Public或Private。
因?yàn)榧虞d項主要是xlsm文件,這些文件在代碼中大都引用ThisWorkbook對象,這對于代碼和數(shù)據(jù)都在相同的工作簿中沒有任何問題,但是一旦該文件被轉(zhuǎn)換成加載項,將要處理的數(shù)據(jù)幾乎不會存儲在實(shí)際的加載項中。因此,最好的方法是加載項僅僅作為代碼的容器。這樣,就不會擔(dān)心在更新加載項時會覆蓋掉用戶設(shè)置和數(shù)據(jù)。
現(xiàn)在,打開dynamicMenu-CreateFromTemplate.xlsm文件,并打開VBE,搜索代碼中的ThisWorkbook,然后決定是否應(yīng)該將其替換為ActiveWorkbook。注意,大多數(shù)工作簿中的代碼的目標(biāo)是處理在活動工作簿(ActiveWorkbook)中的數(shù)據(jù),而不是代碼所在的工作簿(ThisWorkbook)。
然而,還需要注意代碼中潛在的對ThisWorkbook對象的引用。
其次,需要注意區(qū)分Public、Private和不確定的過程和函數(shù)。默認(rèn)情況下,所有沒有加上Public或Private關(guān)鍵字的過程和函數(shù)都被視為Public。這意味著,按下Alt+F8鍵后出現(xiàn)的“宏”對話框中可以看到它們。
使程序盡可能Private,是一個良好的編程實(shí)踐。創(chuàng)建公共的過程,以便它們能夠被用戶運(yùn)行,然而,如果過程僅從其它過程或函數(shù)中調(diào)用,那么它們應(yīng)該被聲明為Private。
代碼編寫并修改完成后,就可以將其轉(zhuǎn)換為加載項了。
轉(zhuǎn)換工作簿成為加載項是非常簡單的。單擊“Office菜單—另存為—其他格式”,在出現(xiàn)的對話框的保存類型中,選擇“Excel加載宏”格式(*.xlam)。此時,文件夾位置改變至“AddIns”文件夾。對于本例來說,將其命名為“createFromTemplate.xlam”,單擊“保存”按鈕。
下面,來安裝加載項。
前面已經(jīng)在系統(tǒng)中創(chuàng)建了加載項,它被存儲在本地的AddIns目錄中。如果發(fā)送該加載項給其他用戶,并且想他們能夠盡可能容易地安裝加載項,那么應(yīng)該直接將該加載項保存到用戶的AddIns文件夾中。在Windows XP中,該文件夾位于:
C:\Documents And Settings\username\Application Data\Microsoft\AddIns
打開Excel,單擊“Office菜單—Excel選項—加載項—轉(zhuǎn)到”,出現(xiàn)如下圖所示的對話框。
如果將加載項保存到本地的AddIns文件夾,那么該加載項就會出現(xiàn)在這個對話框中。如果在其他位置存儲加載項,那么需要單擊“瀏覽”按鈕來找到該文件。為了完成加載項的裝載,只需簡單地選中加載項名稱前的復(fù)選框,并單擊“確定”。
正如所看到的,創(chuàng)建加載項能夠共享定制,而不管打開了哪個文件。
那么,如何卸載和移除加載項呢?
當(dāng)裝載加載項時,需要內(nèi)存,因此在需要時裝載加載項,不需要時卸載是一項經(jīng)常使用的操作。卸載加載項非常容易,但是移除加載項則需要更進(jìn)一步的操作。
要卸載加載項,但仍需要在以后能夠使用該加載項,則調(diào)出上圖所示的對話框后,取消加載項名稱前復(fù)選框的選擇。此時,該加載項并沒有從系統(tǒng)中移除,仍然存在于加載項列表中以便需要時裝載。
要徹底從系統(tǒng)中移除加載項,首先按上述方法將其卸載。然后,關(guān)閉Excel,找到實(shí)際的加載項文件,將其移動到其他位置或者刪除。接著,打開Excel并返回加載項對話框界面,你會注意到該加載項仍然在列表中,單擊該加載項前面的復(fù)選框,將出會出一條消息,提供你將會從列表中刪除該加載項。選擇“是”,然后關(guān)閉Excel。這是重要是,因?yàn)楫?dāng)關(guān)閉Excel會在維護(hù)加載項列表的注冊表中設(shè)置修改。
IsAddin屬性
如果需要在加載項的工作表中添加一些數(shù)據(jù)以便于使用,那該怎么辦呢?此時,可以通過設(shè)置加載項的IsAddin屬性為False,臨時打開該工作表。
在VBE中,選擇加載項工程的ThisWorkbook模塊,在工程屬性窗口中,將IsAddin屬性設(shè)置為False。
將IsAddin屬性修改為False,告訴Excel將該文件視作常規(guī)工作簿。此時所有的工作表都將可見,并且能夠被修改。要再次將該文件轉(zhuǎn)換為加載項,只須按上面的操作將IsAddin屬性設(shè)置為True。
注意,在定制功能區(qū)時使用Personal.xlsb工作簿往往會帶來一些不可預(yù)見的問題,因此推薦使用單獨(dú)的加載項來存儲跨Excel工作簿共享的定制。