複製鏈接
請複製以下鏈接發送給好友

加載宏

鎖定
加載宏是通過增加自定義命令和專用功能來擴展 Microsoft 系列辦公軟件功能的補充程序,可擴軟件包括常用的Word、Excel、PowerPoint、Outlook等 。可從 Microsoft Office 網站或第三方供應商獲得加載宏,也可使用 Visual Basic for Applications 編寫自己的自定義加載宏程序
加載宏又被稱為擴展宏,主要就是擴展原軟件的功能,滿足用户自身需求,或作為商品向公眾發售。
在 Word、Excel、PowerPoint、Access、Outlook、InfoPath、Publisher 七件套中,除InfoPath都能自定義加載宏。
中文名
加載宏
外文名
Add-ins
闡    述
通過增加專用功能擴展的補充程序
類    別
PPT相關詞彙
相    關
組件對象模型
獲    得
微軟網站或第三方供應商等
文件擴展名
.ppa,.xla,.xlam,.docm

加載宏程序簡介

加載宏是Microsoft Office 辦公軟件的一項重要功能,屬於辦公件自身功能之一,不需要另行安裝軟件。用户製作的宏文件可以像Office製作的普通文檔一樣進行保存,打開,複製,與他人分享。
加載宏對於專業從事辦公軟件操作的人員非常重要,熟練掌握加載宏,可以讓操作人員從繁重的數據處理工作中解脱出來。加載宏的運用可以極大的提高工作效率和質量。

加載宏加載分類

1.按擴展名分類
加載宏文件可以是軟件自帶的,像Excel中的查詢嚮導,分析工具庫等。與自帶加載宏對應的則是自定義加載宏——用户自已利用辦公軟件或其他工具軟件編輯的宏。自定義加載宏泛指一類宏,由製作軟件的不同帶有不同的擴展名。如Excel的宏文件2003版以前的後綴為.xla,2007版後的後綴為.xlam,Word的宏文件後綴為.docm,PowerPoint的為.ppa等,在電腦中查到的.DLL .COM .EXE有一部分也是加載宏,是用VB,C++等開發的。
2.編輯位置不同的分類
  1. Office辦公軟件中,編輯宏使用的軟件簡稱VBA(Visual Basic for Applications,快捷鍵ALT+F11,可以通過快捷鍵直接由辦公軟件界面切換到編程界面)。按編輯位置來説,以Excel可供編寫程序的位置種類最齊全,Excel可以在表頁(sheet)上添加宏,也可以在工作薄(Workbook)上添加宏。這兩個地方的宏都是隨事件起動宏。且稱為事件宏。
  2. 舉例:當D列任一單元格被選中時自動更正功能打開,否則關閉
  3. PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)
  4. SelectCase Target.Column
  5. Case4:Application.AutoCorrect.ReplaceText=True
  6. CaseElse:Application.AutoCorrect.ReplaceText=False
  7. End Select
  8. End Sub
  9. 事件宏,不需要特意去點擊執行宏的命令。它像一地雷,踩到了才發生。利用這一特點加載宏的菜單加載過程最適合放在事件宏中去執行。
  10. 舉例:在工作表打開時,自動添加一條叫NewBar的菜單,菜單有三個命令。
  11. PrivateSubWorkbook_Open()
  12. Set NewBar = Application.CommandBars.Add("NewBar", msoBarPopup, , True)
  13. With NewBar.Controls
  14. With .Add: .Caption = "聯繫作者": .FaceId = 3708: .OnAction = "MailAuthor": End With
  15. With .Add: .Caption = "返回Excel": .FaceId = 263: .OnAction = "ReturnExcel": End With
  16. With .Add: .Caption = "關閉Excel": .FaceId = 1088: .OnAction = "QuitExcel": End With
  17. End With
  18. End Sub
  19. Excel除了上述兩個地方外,還有窗體、模塊、類模塊三個地方,其中模塊中的宏可以分成三種:子程序,函數,屬性。
  20. (1)子程序可以作為菜單的命令,菜單上代表子程序的叫自定義命令,如上面例子中“聯繫作者”就是命令,代表“MailAuthor”子程序。體現在對宿主程序的功能擴展的子程序,就叫功能宏。
  21. 在子程序中,Sub auto_open()子程序很特殊,普通子程序只有通過其他程序引用或命令才能啓動。唯獨Sub auto_open()能在加載後就自動執行。許多宏病毒就是通過它啓動的。
  22. (2)函數是用户根據自身需要,通過宏自己編制的函數,使用方式與軟件自帶函數一樣。用户還可以製作製作hlp或chm幫助文件來給其他使用者提供必要的幫助。
  23. (3)屬性同理。
  24. 概述圖為以spreadsheet為主體設計的可以與辦公軟件界面直接交流的窗體,用於查找資料,存放備忘內容,計算檢測中間數據等.

加載宏加載方式

用Office辦公軟件上的VBA設置的加載宏與普通文件很相似,不同之處就是多了一個加載過程。有宏沒加載的文件叫帶宏文件,不是加載宏。
加載方式大同小異。除InfoPath外,都有大致相同的步驟:先編制命令加載過程,再添加子程序,設置工程屬性,將頁保存為宏文件,在軟件中調用。完成了以上五步,以後在打開軟件時,宏就自動隨軟件一起啓動了。
1.編制命令加載過程
加載宏 加載宏
加載過程是將命令添加到菜單,工具欄或快捷菜單的程序。
加載可以是往菜單中添加,也可以往工具欄或快捷菜單中添加,添加的可以是已有的菜單也可以是新建的自定義菜單。
添加內容包括命令名稱,命令代表的功能,命令提示,命令圖標,菜單分隔線,命令快捷鍵
添加加載過程的程序編輯位置,通用方式是將菜單加載放入能自動運行的子程序Sub auto_open()中,這也是許多病毒的起動方式。對Excel和Word又多了一個選擇,可以放在事件中。
Excel可以在ThisWorkbook 的Private Sub Workbook_Open()事件中添加加載。在Private SubWorkbook_BeforeClose(Cancel As Boolean)事件中添加卸載。
Word可以在ThisDocument的Private Sub Document_Open()中添加加載。在Private Sub Document_Close()中添加卸載。
圖1 ThisWorkbook 圖1 ThisWorkbook
加載過程除單菜命令外,還包括環境判斷,條件限制,裝載提示,容錯處理,聯機幫助等。
例子見圖1
聯機幫助需要用專門的軟件先製作chm或hlp文件,在加載過程序中設置關聯即可使用。
加載宏有了加載過程就可以與軟件自帶的菜單不僅使用一樣,看上去也一樣。初初一看還以為是Office自帶的菜單。宏用起來是否方便,加載過程很重要。
圖2 加載菜單 圖2 加載菜單
例子見圖2(2013版EXCEL)
2007版前的Office需要自已設置各種菜單命令,2007版開始可以通過“Excel 自定義.exportedUI”文件來添加命令到工作區。為了兼容各不同的版本,加上版本自動選擇語句就行了。
2.添加子程序
子程序有Private Sub和Public Sub兩種類型,一般需要給其他程序調用的都設置成Public Sub,Private Sub不能被其他子程序調用,只能被命令支配。
在菜單中命令對應的就是實現各種作用功能的子程序。接下來就是編輯子程序。
例子:要實現從Excel中將數據直接錄入財務軟件的入庫單中去,代替手工錄入。給它起個名字叫“模擬粘貼”,這個"模擬粘貼"就是子程序。
最簡單的編輯子程序就是打開錄製宏,然後在辦公軟件上操作。錄製的宏就是一個子程序。
為了方便使用,子程序除了分模快,還要分菜單。將對Excel本身功能擴展的子程序,集合成通用菜單,放在工具欄或快捷菜單中。通用菜單,是對所有Excel表都可以使用的。
例如:Excel本身沒有一個對頁進行合併的菜單,而實際工作中經常要對多個表格中的內容合併到一個表格中去。“合併Excel工作表”就是對Excel本身功能的擴展。
將只用於特定工作的子程序,集合成專用菜單,放在菜單欄中。
例如:從ERP中導出一個產品的BOM表,然後根據BOM表做出產品的成本表,做出一份完整的成本表除了物料清單(BOM),還需要材料單價,匯率,人工工時,費用分配,廢品回收等其他十多個表格。這功能起個名字叫“產品成本BOM自動生成”。顯然,其他人員有這個菜單,沒有相關的數據表格,是使用不了的。
專用菜單,最能體現宏的強大,高效。但它只能對放在指定位置的特定的表進行操作,有時只能用在某台電腦上或者只有特定的登錄用户才能使用。
區分通用與專用的意義就顯示出來了。要用專用宏就要看説明書,或向宏設計人學習用法,瞭解文件存放路徑等。
專用宏除了分模塊,分菜單,甚至還要分文件。加載宏,就是一個文件,是要佔內存的,若要節省內存並加快 Excel的運行速度,卸載不常用的加載宏就很重要,分文件的意義就在這裏。
例如,將倉庫和財務使用的宏分成不同的加載宏:倉庫.xla ,財務.xla。在操作倉庫數據時就加載倉庫.xla 。
在編輯子程序時要注意稱謂的變化。
例如在Excel中ThisWorkbook,ThisSheet用來指宏文件所在的工作簿和工作表,而不帶這些稱謂的都指活動簿,活動表。在PowerPoint就只能通過指定名稱或序列來區分是加載宏還是幻燈片了。
3.工程設置
工程中要設置的內容具體如下:
(1).加載屬性設置包括:設置工作表,工作簿屬性,VBAProject的屬性。
Office各軟件之間會有些不同。例如Excel需要設置帶宏的表不可見,否則可見到表,PowerPoint保存成宏就不可見,Word則設置了密碼,不僅表不可見連工程都不可見。這些特點是編程人員需要注意的。
(2).設置工程密碼,對Excel很方便下次想改程序,雙擊就會提示密碼輸入 ,就可以修改。同樣的做法Word會顯示工程不可見,因此想下次修改程序,就不能設置。如果想保密讓Excel工程不可見,可以用二進制編輯器對加載宏文件進行修改,讓工程不可見
(3).引用是擴展插件的,如2003excel的spreadsheet是11.0版的,不能切換顯示三個sheet表,而12.0版可以,如需要這個功能就在引用中調整。
(4).數字簽名:就是添加數字證書
4.保存為專門的宏文件
加載宏實現了宏與數據的分離,將只能用於某個表的宏,變成了對所有表格都可以使用的宏。身份也由帶宏文件變成了加載宏。
在Microsoft 系列辦公軟件中加載宏文件與普通文件比較只是多了VBA編輯的宏,但文件後綴是不同的。
如Excel的宏文件後綴為.xla,Word的宏文件後綴為.docm,PowerPoint的為.ppa等。在資源管理器中,可以看到這類文件的圖標右上角會有個紅立方。
在編好宏後將它放在自已指定的文件夾,注意在使用別人的宏時,系統會建議存放位置,但最好放在自已指定的位置,理由有三條:一系統文件夾不好找,二防止系統重裝丟失宏文件,三方便修改文件。
Visual Basic for Applications 有菜單上有“保存”命令,用來保存編制的宏文件。
5.在軟件中調用宏
保存的宏就可以調用了,不過Office 辦公軟件七套件之間都有些許差異。舉例如下:
2003版Excel進入菜單/工具/加載宏/瀏覽,點擊瀏覽,找到宏存放位置,點宏文件,確定,菜單就顯示出來,下次打開EXCLE時,宏菜單會自動加載。要去掉宏菜單,進入Excel進入菜單/工具/加載宏,去掉列表中的鈎就可以了。如果加載宏設置了卸載,菜單馬上就會消失。如果沒有設置,菜單仍然顯示,但不能用,關閉軟件再打開菜單就消失。下次想用,打上鈎就又出現了。
2003版PowerPoint要先進入註冊表註冊DebugAddins,再調用。具體操作如下:
(1)點擊/開始/運行,輸入regedit,確定
(2)進入HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\PowerPoint\Options,11.0是ppt2003的版本號,PPT2010的版本值是14.0
(3)選中Options,右擊:新建\DWORD值,命名為“DebugAddins”,雙擊新建的DebugAddins,出現編輯雙字節值(DWORD)的窗口,設置數值數據為1,關閉註冊表。注意,以上操作都是在ppt關閉時進行。
(4)打開PowerPoint,進入VBA窗口工程資源管理器,就可以看到編輯界面了,剩下的就是編代碼了。
(5)宏編好後,設置屬性,添加數字簽名(不添加打不開),將文件保存為ppa,然後進加載項添加
説明:ppt的加載宏無法修改保存,每次修改都要再起個名字保存,如果不想弄亂名字,就需要關掉ppt後,再刪除原宏,將新保存的宏改名再調用。最佳的方法是掛個專用宏,專用宏將修改的過程導入,然後新開一個ppt文件,導入過程,去掉加載,新ppt覆蓋原宏,重新加載。
2003版PowerPoint加載過程,只能用Sub auto_open(),去掉宏菜單需要去掉加載,重新打開PowerPoint。2003版Word以模板的形式存在,將加載宏設置成共用模板及加載項即可。
6.證書問題
數字證書有兩種,一種是用Office自帶工具製作的證書,一種找專業網站買的證書。無論哪種證書安裝之後,就可以在宏安全性“高”的情況下也能打開加載宏,沒有證書就只能選擇“低”,給病毒機會了。
用別人編的加載宏有個安裝證書的問題。在遇到有證書的宏時電腦會提示安裝,標題叫“安全警告”,點擊:詳細信息/查看證書/安裝證書/是/確定,注意在“安全警告”中把“總是相信....”的小框鈎上。
證書每個人都可以製作,進入Office工具,打開“VBA項目的數字證書”,填個名字就行了。如輸入:hhch
證書也是一個文件可以從系統中導出,擴展名為.cer。
安裝證書很簡單:進入VBA,點擊菜單/工具/數字簽名/選擇(在這裏就可以看到“hhch”證書)/確定/確定。其實不帶宏的普通辦公文件,建議也添加數字簽名,可以防止病毒感染。
7.版本與兼容性問題
版本問題是加載宏共享要注意的首要問題。
舉例:同樣是2003版的Excel在模塊中加入了窗體,窗體採用了spreedsheet電子錶。當在其他電腦上加載時就出現了無法裝載對象的提示。這都需要考慮兼容性。
Office 97-2003同一軟件的加載宏,都基本相似。Excel 2007之後就有了變化。如果將功能區看成是加載命令的又一種新方式,則一切都變得很簡單。
(1).Excel 2007之後,加載項是作為可選項由用户自已決定是否添加,要使用加載宏必須先進入自定義功能區的主選項卡中加上加載項和開發工具。具體操作2007和2010等各版本稍有不同。
(2).Excel 2007之後,對執行外部命令作了一些限制。語法要求更嚴格一點,但大多數加載宏子程序不用修改就可以使用。
(3).Excel 2007之後,加載宏是獨立的工能區“加載宏”主選項卡,且以前版本的菜單仍然以菜單的形式顯式,顯得與功能區其他命令格格不入。工具欄則以組的形式顯示在“自定義工具欄”,當打開其他選項卡後則看不到了。完全失去了老版本中隨時可見的便捷性。
(4).Excel2007之後,加載過程可以用自定義功能區的方式加載。方法如下:
方法一.不考慮與07以前的版本兼容。
07之後的版本,是不會編輯加載過程的菜鳥的福音。進入EXCEL選項卡/從下列位置擇命令/點擊下拉菜單,選擇宏,在VBA工程未鎖定的情況下,有宏子程序存在,下面的大框中就會出現命令的名字。
點擊新建選項,再新建選項組,選中宏子程序名,選擇添加(A)>>。一個自已的宏就添加到功能區了。
方法二.考慮與老版本兼容的加載方式。
如果一個加載宏需要既用於07版之前,又用於07版之後,直接在加載過程中添加如下語句,則新版本就會自動去掉加載過程。
If Application.Version = 14# Then End
14#是2010的版本值。有了這個語句就不用看到難看的老版本菜單了,接下來就是動手建立自定義功能區來代替原菜單了。
這裏有一個小技巧,2003版之前的自定義工具欄是隨時可見的,到了07之後的版本被放在加載宏主選項卡,當選擇其他選項卡時就看不到了,失去了便利性。07之後的版本有快速訪問工具欄,可以將以前放入自定義工具欄的命令放到這裏,然後設置成“在功能區下方顯示快速訪問工具欄”,便利性就又回來了。
自定義的功能區可以導入導出。導出文件名:Excel 自定義.exportedUI
當其他電腦也是07以上版本時只需要導入這個文件就可以了,不必再新建自定義功能區。
自定義工作區中的菜單會根據菜單自動調整排列方式和圖標大小。
加載宏 加載宏
方法三.利用文件格式的特點添加加載宏菜單
在07版之後,許多電子錶擴展名都多了一個x,這是因為以前的電子錶都是二進制文件,07版之後除.xlsb文件外,其他的文件都是可以打開的XML文件的壓縮包。因此只需要符合XML規則的都應該是允許的。加載宏的命令也就可以直接設計到電子錶中,成為電子錶的一部分。方法很簡單:直接打開文件壓縮包,定義文件結構關係,寫加載菜單,把添加的東西塞進電子錶。具體步驟如下:
(1) 打開Excel,將文件保存為加載宏文件。如:xx. xlam
(2)關閉Excel,打開放加載宏文件的文件夾。
(3)在文件夾中創建一個名為customUI的新文件夾。
(4)打開記事本,錄入下面的自定義選項卡的XML代碼,保存文件名:customUI.xml,保存類型:所有文件,編碼:UTF-8
自定義選項卡的XML代碼:
(5) 在加載宏擴展名後添加.ZIP或.RAR,讓文件成本壓縮包,即xx. xlam.zip
(6) 打開壓縮包的_rels文件夾,拖出其中的文件.rels,用記事本修改它。在.rels文件中最後一個之前添加下面的代碼:
Id屬性值隨意,不要與別的相同即可。Type屬性必須指向自定義用户界面擴展的架構,因此使用如代碼中顯示的URL。Target屬性指向自定義文件的位置。
(7)將修改後的_rels文件拖回原位置,替換原文件。
(8)將customUI文件夾,連夾帶文一起放到壓縮包中。
(9)將添加的擴展名.zip刪除,還原為加載宏。
説明:上述代碼只是很簡單的一個例子,用記事本編輯,在瀏覽器中打開,檢查是否顯示正常,如果提示錯誤 則再修改即可。也可以在EXCL選項-常規:打開“顯示加載項用户接口錯誤(U)”,根據提示自已調試。如果對代碼不熟悉,可以藉助Microsoft Office 2007 Custom UI Editor或XML Notepad XML專門的代碼的工具。
這個方法設計出來的加載菜單,嵌到了電子錶中,只要打開表就出現,表關閉就消失。不再受其他任何限制,是07版之後又一非常流行的方法。
功能區菜單示例 功能區菜單示例
8.加載宏的卸載問題
若要節省內存並加快 Office的運行速度,卸載不常用的加載宏是一個好辦法。卸載加載宏之後,其功能和命令都將從 Office 中刪除,但加載宏文件本身仍保留在計算機上以待重新加載。
組件對象模型(COM)加載項,它在多種編程語言(包括 Visual Basic 、Visual C++ 和 Visual J++)中提供了附加功能。作為開發者,您可以在 Microsoft Visual Basic 幫助中查找有關設計 COM 加載宏的信息。開發和測試時,可以在使用加載宏的安裝程序之前在 Office 中加載或卸載 COM加載項
加載宏文件一般並不大,以Excel2010為例子空白表也就8KB,附加在表上的宏程序是以無格式文本存在,因此500KB的加載宏幾乎可以完成一個財務人員的所有需求。對於1GB以上內存的電腦沒有絲毫負擔。並且對打開Office也沒有什麼明顯影響。

加載宏加載設計

1.設計思想
哪些工作可以設計成宏?這是許多宏編輯人員迷糊的問題,也是需求人員迷糊的問題。設計遵循一個原則:“重複的也就是可以自動化的”。
第一種重複是操作重複行為。例如Excel中的自動篩選,每次都需要填寫條件,在需要反覆對比數據時,就顯得很麻煩,這樣就可以設計一個宏,直接將選擇單元格的值自動作為條件,並執行篩選,這個宏起個名叫“自由篩選”。這不僅能提高工作效率,還能減少職業病“腕管綜合徵”。
另一種重複是工作重複行為。財務人員每月底都有一些固定的工作要做,這些固定工作就可以設計成宏。 [1] 
例如:金蝶K3材料賬每月底都需要將未配發票的入庫材料生成估價憑證,一張憑證約5分鐘完成,有100個供應商,就最少8小時才能完成,工作不復雜,純機械式操作,每月進行。設計一個宏叫“K3自動生成憑證”,考慮網速約0.5分鐘一張憑證。月底將未配票供應商在Excel表中列出,在k3生成憑證界面設置好生成條件,午休下班前執行宏,利用午休就可以完成。
加載菜單 加載菜單
對於第二種重複,有一種很錯誤的觀念,“我的表很複雜,不可能自動化”。其實正因為複雜,藉助電腦才可以大大的減少錯誤,提高效率。隨着不斷完善,程序會變得非常可靠。只要數據有來源、依據和算法,就可以自動化。
事實上一些很複雜的、數據量大的表,編程時間與做表時間幾乎相當。原因很簡單,涉及到具體的步聚時,編程並沒有什麼科技含量,做表與編程是一樣的工作。如果遇到了大數據,重複操作,程序處理是一忽而就,豈是手工能比?
對於一些繁瑣的表格調整,宏的效率更是遠非人工可比較:無遺忘,不因人而異,只要注意原始表格數據儘量引用從其他軟件導出的數據,可保證每次處理的結裏完全一致。
有點遺憾的是,專用菜單換個公司或換個電腦就必須得重新考慮原始數據的存放,以及不同公司數據上的不同特點和操作系統等環境因素。因此對專用菜單要儘可能考慮人機對話,給操作者一定的自主權。
2.設計路線
宏是為了減輕工作負擔,因此大可先按手工操作的方式做初步設計,然後在工作中逐步優化。
加載宏設計中一個最簡便的方法是邊操作邊錄製宏,再修改。修改包括刪除重複不需要的動作,添加條件判斷,添加循環過程,添加人機對話。
當有了一些程序積累後,大量套用已有程序,編程會變得非常高效。
宏設計不同於用C++等程序設計,宏設計可以從任何可以自動處理的環節着手。邊工作邊設計,形成一個個的子程序,手工做一點,程序幫一下手。效率也就有了提升。隨着工作的不但重複,設計工作也就會不斷的明確。等到各環節都成熟了,串起來就變成全自動化了,點一點鼠標就可完成一個看似非常複雜的工作。
3.設計對象
加載宏的設計並不是僅限於一張表或幾張表的處理,也並不限於對軟件本身的操作,看看宏病毒的神出鬼沒就能明白宏的強大。
加載宏是對軟件功能的擴展,但並不限於軟件本身。例如Excel並不僅是畫畫表格,更多的是充當其他軟件數據延伸處理的工具。用了加載宏之後Excel就可變成其他軟件的自動中轉中心、聯動中心、控制中心。
以Excel為例子:
加載宏可以對Excel表中的數據處理,包括將報表自動生成數據分析圖,然後直接調動PowerPoint自動生成PPT,調動Word生成報告,調動Outlook自動郵件發送。
加載宏可以通過SendKeys等語句,模擬手工方式對財務軟件自動操作,操控HprSnap的文本捕捉功能對打印頁面、明細表等不能直接複製的地方取數據,操作bat在後台找設計圖紙等。
宏可以通過註冊表或文本等直接簡單的方式進行環境對接,參數傳遞,實現一個軟件的宏調動另一個軟件的宏目的,許多以前看上去一個個獨立的工作,獨立的平台,就可以通過加載宏,組成一個廉價的真正的辦公自動化。
4.設計適用人員
加載宏功能強大,對編程人員並沒有太多要求,只需要注意掌握幫助中的標準用語。
藉助錄製宏,可以解決對象輸入問題。
Microsoft 系列辦公軟件的VBA都有詳盡的幫助説明,遇到問題時查詢幫助,幫助中有許多編程實例,可供使用者參考套用。
從實踐來看,許多初學編程人員都存在查詢用詞不標準,無法準確找到需要的幫助的問題。解決了這一問題,就解決了宏設計的全部問題。
參考資料