載入宏是Microsoft Office 辦公軟體的一項重要功能,屬於辦公件自身功能之一,不需要另行安裝軟體。用戶製作的宏檔案可以象Office製作的普通文檔一樣進行保存,打開,複製,與他人分享。
載入宏對於專業從事辦公軟體操作的人員非常重要,熟練掌握載入宏,可以讓操作人員從繁重的數據處理工作中解脫出來。載入宏的運用可以極大的提高工作效率和質量。
載入分類 1.按擴展名分類
2.編輯位置不同的分類
PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)
SelectCase Target.Column
Case4:Application.AutoCorrect.ReplaceText=True
CaseElse:Application.AutoCorrect.ReplaceText=False
End Select
End Sub
PrivateSubWorkbook_Open()
Set NewBar = Application.CommandBars.Add("NewBar", msoBarPopup, , True)
With NewBar.Controls
With .Add: .Caption = "聯繫作者": .FaceId = 3708: .OnAction = "MailAuthor": End With
With .Add: .Caption = "返回Excel": .FaceId = 263: .OnAction = "ReturnExcel": End With
With .Add: .Caption = "關閉Excel": .FaceId = 1088: .OnAction = "QuitExcel": End With
End With
End Sub
載入方式 用
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()中添加卸載。
ThisWorkbook 載入過程除單菜命令外,還包括環境判斷,條件限制,裝載提示,容錯處理,在線上幫助等。
例子見右圖
在線上幫助需要用專門的軟體先製作chm或hlp檔案,在載入過程式中設定關聯即可使用。
載入宏有了載入過程就可以與軟體自帶的選單不僅使用一樣,看上去也一樣。初初一看還以為是Office自帶的選單。宏用起來是否方便,載入過程很重要。
載入選單 例子見右圖(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代碼:
<?xml version="1.0" encoding="utf-8" ?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="ribbonLoaded">
<ribbon><tabs><tab id="idImageShow" label="工具" insertBeforeMso="TabHome">
<group id="A0" label="VBA工具" >
<button id="A40" imageMso="BlackAndWhiteInverseGrayscale" size="large" label="製作Ribbon選單" onAction="製作Ribbon選單"/>
<button id="A41" imageMso="BlackAndWhiteBlackWithWhiteFill" size="normal" label="導出過程" onAction="導出過程"/>
<button id="A42" imageMso="BlackAndWhiteLightGrayscale" size="normal" label="製作選單" onAction="製作選單"/>
<button id="A43" imageMso="BlackAndWhiteBlack" size="normal" label="導出宏代碼" onAction="導出宏代碼"/>
<button id="A45" imageMso="BlackAndWhiteAutomatic" label="自定義轉自帶" onAction="自定義轉自帶"/>
<button id="A44" imageMso="BookmarkInsert" size="normal" label="生成網頁" onAction="生成網頁"/>
</group></tab></tabs></ribbon></customUI>
5)在載入宏擴展名後添加.ZIP或.RAR,讓檔案成本壓縮檔,即xx. xlam.zip
6)打開壓縮檔的_rels資料夾,拖出其中的檔案.rels,用記事本修改它。在.rels檔案中最後一個</Relationships>之前添加下面的代碼:
<Relationship Id=”rId4″ Type=”http://schemas.microsoft.com/office/2006/relationships/ui/extensibility” Target=”customUI/customUI.xml” />
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中的自動篩選,每次都需要填寫條件,在需要反覆對比數據時,就顯得很麻煩,這樣就可以設計一個宏,直接將選擇單元格的值自動作為條件,並執行篩選,這個宏起個名叫“自由篩選”。這不僅能提高工作效率,還能減少職業病“
腕管綜合徵 ”。
另一種重複是工作重複行為。財務人員每月底都有一些固定的工作要做,這些固定工作就可以設計成宏。
例如:金蝶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都有詳盡的幫助說明,遇到問題時查詢幫助,幫助中有許多編程實例,可供使用者參考套用。
從實踐來看,許多初學編程人員都存在查詢用詞不標準,無法準確找到需要的幫助的問題。解決了這一問題,就解決了宏設計的全部問題。