轉貼(電腦報):VBA開發實用指南
2024-07-21 02:15:33
供稿:網友
 
vba開發實用指南 
 唐大中 附錄文章 
  vba(visual basic for application)是office自帶的二次開發工具,可為日常辦公帶來極大的便利。本文講述office各個成員vba開發的常用對象和其相關的屬性、方法和事件(包括word、excel、powerpoint等),并給出相關的實例代碼。
  一、vba基礎
  1.什么是vba
  在office對于一些煩瑣、重復的操作,用戶可以通過“宏”來實現。“宏”即是由一系列命令和指令組合而成的命令集,其本質是vba代碼組成的程序。vba是微軟在其開發的應用程序中共享的通用自動化語言。
  2.錄制/運行宏
  vba初期開發可通過錄制“宏”的操作來獲取代碼,在office中幾乎所有的操作均可通過錄制“宏”來獲取代碼。這里,我們通過一個簡單的“宏”錄制實例來學習:在word中將所有的“電腦”字樣替換為“計算機”,并插入一張4行2列的表格。
  在office中錄制宏,可單擊“工具→宏→錄制新宏…”菜單命令實現,單擊該命令后將出現“錄制宏”對話框,如圖1所示。
 
  其中,“宏名”框用于為錄制的宏設置名稱,可使用默認的“macro1”。“工具欄”和“鍵盤”二個按鈕分別用于設置宏的觸發位置。“將宏保存在”框可設置宏的保存位置,一般包括“normal.dot”(共用模板)和當前文檔2種,建議保存在當前文檔中,以免對所有文檔產生影響。在“說明”框中可輸入對該宏的相關說明。單擊“確定”按鈕,即可開始錄制宏。此時在文檔編輯界面中將顯示“宏錄制”工具欄。該工具欄有2個與錄音機非常類似的按鈕,第一個按鈕為“停止錄制”,第二個按鈕為“暫停錄制”。在錄制過程中可隨時通過這二個按鈕來進行控制。
  隨后按常規操作來實現前述的任務,操作完成后單擊“停止錄制”按鈕,結束錄制即可。
  注意:錄制“宏”時可使用鼠標單擊菜單和按鈕,但無法錄制鼠標在文檔窗口中的移動,因此必須通過鍵盤來實現這些動作。此外,office中所有錄制的“宏”,其名稱的首字符必須為字母或漢字、數字及下劃線(名稱最多可為255個字符),且“宏”名稱中不允許包含空格。
  運行已錄制的“宏”,可單擊“工具→宏→宏”菜單命令。在出現的“宏”對話框的“宏名”下拉框中選擇需運行的宏,然后單擊“運行”按鈕即可。隨后word將自動重現前述執行的操作,避免了重復的辦公操作。
  3.宏的局限性
  雖然office的大部分操作均可用錄制“宏”的方法來保存,但錄制的“宏”僅“忠實”地再現了特定的操作,對于一些需要進行邏輯判斷和流程控制的操作,則顯得力不從心,如自動替換多個不同的內容時,按錄制“宏”的方式操作,需要按替換內容的數量錄制多個“宏”,且每個“宏”僅可用于某個內容的替換,反而為工作增添了麻煩。
  錄制“宏”存在很多局限性,除無法進行邏輯判斷和流程控制操作外,還包括很多。如交互能力較差、無法顯示office的內置對話框、無法顯示用戶自定義的窗體和無法創建復雜的工具欄或修改菜單等。
  4.vba編輯環境
  雖然“宏”存在很多局限性,但通過錄制“宏”獲取了vba代碼后即可通過vba編輯器來為代碼添加邏輯控制并設計流程等。以word 2002為例,“宏”錄制完成后,可在運行宏對話框中選擇錄制的宏并單擊“編輯”按鈕,即可顯示vba編輯環境,如圖2所示。
 
  vba編輯環境由工程資源管理器、屬性窗口和代碼編輯/窗體設計窗口等部分組成。在工程資源管理器中列出當前打開的所有vba項目,屬性窗口用于設置相關對象的屬性,代碼編輯/窗體設計窗口則可輸入模塊的代碼或編輯窗體和類模塊。
  二、vba開發共用對象詳解
  vba和其他面向對象的開發語言類似,同樣有非常多的對象組成,且不同的office成員即提供了大量的開發對象,如工具欄、office助手、內置對話框和窗體等。
  (一)工具欄及其控件對象
  在office中通過vba開發工具欄和菜單,需使用office提供的commandbar、commandbarbutton、commandbarcombobox等對象,這些對象即代表工具欄、工具欄按鈕和工具欄下拉框,通過這些對象可編制出各類復雜的工具欄或菜單。
  1.commandbars集合
  該集合代表office所有的工具欄,可用名稱或索引號指定菜單欄或工具欄,但僅可用名稱指定一個菜單、快捷菜單或子菜單。如兩個或兩個以上自定義菜單或子菜單名稱相同,則返回第一個具有該名稱的對象。
  其add方法用于新建一個工具欄,并返回 commandbar對象。
  語法:expression.add(name, position, menubar, temporary)
  參數說明:
  name為可選的variant 類型,代表新工具欄的名稱。如果省略,則使用默認的名稱;position為可選的variant 類型,代表新工具欄的位置。該參數值可通過vba常量進行設置,如msobarleft、msobartop、msobarright、msobarbottom常量(設置新工具欄位于軟件工具欄中位置);msobarfloating常量(代表新工具欄可移動);msobarpopup常量(代表新工具欄為快捷菜單)等;menubar為可選的variant 類型,用于設置是否用新工具欄替換活動工具欄;temporary為可選的variant 類型,用于設置新工具欄是否暫時有效。
  2.commandbar對象
  該對象代表應用程序中的工具欄,新建工具欄的控件均以該對象為載體。
  (1)controls屬性:返回commandbarcontrols對象,代表指定工具欄中的所有控件。
  (2)namelocal屬性:返回由應用程序版本語言所設置的工具欄名稱,如對軟件的內置工具欄設置會出現錯誤。
  (3)position屬性:返回或設置工具欄的位置,值可通過vba常量進行設置,如msobarleft、msobartop、msobarright、msobarbottom、msobarfloating、msobarpopup或msobarmenu等。
  (4)type屬性:返回或設置工具欄的類型,值可通過vba常量進行設置,如msobartypenormal(工具欄為普通類型)、msobartypemenubar(工具欄為菜單類型)、msobartypepopup(工具欄為彈出菜單類型)等。
  (5)reset方法:將內置工具欄重置為默認設置,在恢復軟件原有工具欄或菜單時非常有用。重置內置工具欄將刪除其中的自定義控件并恢復其內置控件。
  3.commandbarcontrols集合
  該集合代表工具欄中的所有工具欄控件。
  其add方法用于在commandbarcontrols集合中增加一個工具欄控件。
  4.commandbarcontrol對象
  該對象代表工具欄控件,對自定義工具欄控件,可使用 commandbarbutton、commandbarcombobox和commandbarpopup對象進行定義,而對軟件內置的控件進行操作,而該控件又無法使用上述三個對象表示,則可使用commandbarcontrol對象。
  (1)begingroup屬性:用于設置工具欄控件是否分組顯示。
  (2)caption屬性:用于設置工具欄控件的標題文字,并可作為默認的控件屏幕提示。
  (3)id屬性:用于設置commandbarbutton、commandbarcombobox和commandbarcontrol對象的功能,這些控件可直接設置為內置工具欄控件的id,這樣該控件即具備了軟件內置的相應功能,自定義控件的id屬性均需設置為1。
  (4)copy方法:將工具欄控件復制到已有的工具欄中。
  語法:expression.copy(bar, before)
  參數說明:
  bar為可選的variant 類型,代表目標工具欄,如果省略,則控件將復制到自身所在的工具欄;before為可選的variant 類型,代表新控件在指定工具欄的位置,即新控件將添加至該位置的控件前,如果省略,則控件將復制到工具欄的末尾。
  (5)type屬性:返回工具欄控件的類型,可通過vba常量進行引用,常用的工具欄控件類型如下表所示:
常量名稱 
含義 
msocontrolbutton 
控制按鈕 
msocontrolbuttondropdown 
帶下拉列表的按鈕 
msocontrolbuttonpopup 
帶彈出菜單的按鈕 
msocontrolcombobox 
下拉組合控制框 
msocontroldropdown 
下拉列表控制框 
msocontroledit 
文本框 
msocontrolexpandinggrid 
可擴展的表格 
msocontrolgraphiccombo 
圖像下拉組合框 
msocontrolgraphicdropdown 
圖像下拉列表框 
msocontrolgrid 
表格 
msocontrolpopup 
彈出菜單 
 
 
  5.commandbarbutton對象