VBA開發實用指南

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對象

  該對象代表工具欄的按鈕控件。

  (1)OnAction屬性:返回或設置Visual Basic代碼過程名(該代碼過程不可使用參數),該過程將在單擊按鈕後運行。

  (2)Style屬性:返回或設置工具欄按鈕的顯示方式。值可通過VBA常量進行設置,常用的工具欄按鈕控件類型如下表所示:


常量名稱
含義


msoButtonIcon
包含圖標的按鈕


msoButtonCaption
包含標題的按鈕


ButtonIconandCaption
包含圖標和標題的按鈕


msoButtonIconAndCaptionBelow
包含圖標和標題,且標題位於底部的按鈕


msoButtonIconAndWrapCaption
包含圖標和標題,且標題自動換行的按鈕


msoButtonWrapCaption
包含標題,且標題自動換行的按鈕







  (3)TooltipText屬性:返回或設置工具欄按鈕控件的屏幕提示。

  (4)FaceId屬性:返回或設置工具欄按鈕的圖標編號,設置工具欄按鈕的外觀而非其功能,自定義圖標的工具欄按鈕,其 FaceId屬性值爲 0。

  (5)CopyFace方法:將工具欄按鈕控件的圖標複製到剪貼板。

  (6)PasteFace方法:將剪貼板的圖標內容粘貼至工具欄按鈕控件。

  (7)Execute方法:運行工具欄控件對應的過程或內置命令。

  6.CommandBarComboBox對象

  該對象代表工具欄中的組合框控件。

  (1)DropDownLines屬性:返回或設置組合框控件的行數,如將其設置爲 0,則控件行數將取決於列表的條目數。

  (2)List屬性:返回或設置組合框控件中某列表項的值,對內置組合框控件只讀。

  (3)OnAction屬性:返回或設置Visual Basic代碼過程名(該代碼過程不可使用參數),該過程在單擊或更改組合框控件值時運行。

  (4)Type屬性:返回或設置組合框控件的顯示方式。

  (5)AddItem方法:用於在組合框控件中添加一個列表項,且該組合框控件必須爲自定義的控件。

  (6)RemoveItem方法:用於從組合框控件中刪除一個列表項。

  (二)助手對象
  Office助手是一組卡通動畫人物,這些助手可提供友好的信息提示,並可通過自定義對話框(又稱“氣球”)的文字格式和控件來實現簡單的交互。

  1.Assistant對象

  該對象代表Office助手,可通過Application對象的Assistant屬性返回Assistant對象。默認助手爲“大眼夾”(即“Clippit”),用戶可在右鍵單擊助手後出現的快捷菜單中單擊“選擇助手”菜單項,在彈出的“Office助手”對話框中即可選擇不同的助手。

  (1)Animation屬性:用於返回或設置Office 助手的動畫效果。如應用於 Balloon對象,則“助手”僅在顯示氣球時纔會出現動作,可通過常量賦值,常用的常量及其含義如下表所示:



常量名稱
代表的動作



msoAnimationAppear
助手出現



msoAnimationBeginSpeaking
助手開始說話



msoAnimationCheckingSomething
助手檢查動作



msoAnimationDisappear
助手消失



msoAnimationGoodbye
助手說“再見”



msoAnimationGreeting
助手致歡迎的動作



msoAnimationIdle
助手休息的動作(爲默認動畫效果類型)



msoAnimationPrinting
助手打印的動作



msoAnimationSaving
助手保存的動作



msoAnimationSearching
助手開始查找的動作



msoAnimationThinking
助手考慮的動作







  (2)AssistWithAlerts屬性:用於設置助手氣球是否發送給應用程序警告信息。

  (3)AssistWithHelp屬性:用於設置當用戶按F1鍵顯示幫助時助手是否出現。

  (4)AssistWithWizards屬性:用於設置助手是否提供嚮導型的聯機幫助。

  (5)FeatureTips屬性:用於設置助手是否更有效地提供有關應用程序功能信息。

  (6)GuessHelp屬性:用於設置助手是否顯示幫助主題列表。

  (7)FileName屬性:用於設置助手所使用的文件名,助手文件的擴展名爲“acs”,一般位於Office的安裝目錄下。其中“孫悟空”爲mnkyking.acs;“大眼夾”爲Clippit.acs;“戀戀”爲OffCat.acs;“聰聰”爲Rocky.acs;“七巧板”爲Logo.acs;“小靈通”Dot.acs;“美麗家園”爲MNature.acs;“F1”爲F1.acs。

  (8)NewBalloon屬性:用於新建助手氣球,並返回Balloon對象。

  (9)On屬性:用於設置是否使用助手。

  (10)Sounds屬性:用於設置助手是否發出與動畫對應的聲音。

  (11)TipOfDay屬性:用於設置每次啓動Office時,助手是否顯示專用的提示。

  2.Balloon對象

  該對象代表氣球,助手可在該氣球中顯示標題、文字和一些控件,通過NewBalloon屬性可返回Balloon對象,且任意時刻僅有一個氣球可視。

  (1)BalloonType屬性:用於設置助手所用的氣球類型,可通過常量賦值。創建Balloon對象時,初始值爲msoBalloonTypeButtons常量。

  (2)Button屬性:用於設置助手氣球底部按鈕類型。創建Balloon對象時,初始值爲msoButtonSetOK。

  (3)Icon屬性:用於設置助手氣球左上角的圖標類型,可通過常量賦值。

  (4)Checkboxes屬性:返回BalloonCheckboxes集合,即氣球中的所有複選框。

  (5)Heading屬性:用於設置助手氣球中的標題。氣球標題和文本均支持包含下劃線和系統調色板16色的文字。

  如需顯示包含下劃線的文字,可通過“{ul}”、“{ul 1}”語法來開始下劃線和“{ul 0}” 語法來清除下劃線;如需改變文字顏色,可通過“{cf number}”語法,其中number常數爲系統調色板支持的16種顏色。

  (6)Labels屬性:返回BalloonLabels 集合,即氣球中的所有標籤。

  (7)Mode屬性:用於設置氣球的模態,即是否在顯示氣球的同時允許用戶在程序中繼續工作。

  (8)Text屬性:用於設置助手在氣球標籤、複選框或直接顯示部分的文字。

  (9)Close方法:用於關閉活動的非模態氣球,僅在回調過程中才可使用。

  (10)Show方法:用於顯示指定的氣球對象。

  3.BalloonCheckBox對象

  該對象代表氣球中的複選框控件。

  Checked屬性:返回是否已選擇氣球中的指定複選框。

  (三)內置對話框對象
  Office使用了大量的內置對話框,在Word和Excel中提供了開發接口,使開發者可充分利用內置對話框實現很多操作,尤其在Word中可使用多種方法顯示內置對話框,實現不同的功能需求,這裏,我們以Word的內置對話框爲例進行講解。

  1.Dialogs集合對象

  該集合對象代表Word或Excel中的Dialog對象集合,其中每個Dialog對象均代表一個內置對話框,無法在Dialogs集合中創建新的內置對話框,也無法添加對話框。

  2.Dialog對象

  該對象代表內置對話框。

  (1)CommandName屬性:用於返回顯示指定內置對話框對應的過程名。

  (2)DefaultTab屬性:用於設置顯示指定對話框時,其被激活的選項卡。

  (3)Display方法:用於顯示指定的內置對話框,並直至用戶關閉該對話框或超時,使用顯示內置對話框時,不會執行任何操作(即僅用於顯示),但可返回用戶關閉對話框時所單擊的按鈕代號。

  其中,返回-2,代表“關閉”按鈕;返回-1,代表“確定”按鈕;返回0,代表“取消”按鈕;返回大於 0的值,則1代表第一個按鈕,2代表第二個按鈕,以此類推。

  (4)Execute方法:用於應用內置對話框的當前設置。

  (5)Show方法:用於顯示並執行內置對話框,即如同用戶通過菜單或工具欄打開對話框,和Display方法相同,均返回用戶關閉對話框時所單擊的按鈕代號。

  (6)Update方法:用於更新內置對話框的參數值。

  3.顯示內置對話框

  通過VBA代碼可控制內置對話框的顯示,如需調用指定的內置對話框,可將Dialogs屬性通過常量進行賦值,如“Dialogs(wdDialogFileOpen).Show”可顯示Word的“打開”對話框。在前述代碼中,如將該語句的返回值賦予Dialog變量,即可通過該變量返回或設置對話框的選項,代碼如下所示:

  Set testDialog = Dialogs(wdDialogFileOpen)

  合理使用內置對話框可實現很多的功能,Word和Excel中提供接口的內置對話框非常多,限於篇幅,本文不做詳細介紹,讀者可參考VBA的聯機幫助。

  (四)窗體和相關控件對象
  VBA的編輯器和VB非常類似,因此也提供了窗體和相關的控件,但又由於Office的特點使VBA中的窗體、控件和VB存在一些差異。

  1.用戶窗體知識點

  窗體是程序實現和用戶交互的接口,通過窗體不僅可改善程序的界面友好性,而且可進一步增強、完善程序的功能。在VBA編輯器中可創建用戶窗體,在工程資源管理器中右鍵單擊項目,在出現的菜單中選擇“插入→用戶窗體”命令,隨後在設計界面中將顯示默認窗體和控件工具箱,該控件工具箱和VB的控件工具箱很類似,如圖3所示。



  2.用戶窗體常用控件

  雖然VBA窗體開發所用的控件和VB較爲類似,但其屬性和方法和VB存在一定的差異:

  (1)標籤控件:該控件用於顯示不可編輯的文本,默認屬性爲Caption屬性,默認事件爲Click事件。

  (2)文本框控件:該控件用於顯示可編輯的文本信息,是VBA開發中最常用編輯控件,默認屬性爲Value屬性,默認事件爲Change事件。

  (3)複合框控件:該控件將列表框和文本框進行結合,用戶可進行輸入和列表框選擇操作,默認屬性爲Value屬性,默認事件爲Change事件。

  (4)列表框控件:該控件用於顯示值列表,用戶可選擇一個或多個列表項,VBA中的列表框可通過列表形式和選項按鈕或複選框的形式使用,默認屬性爲Value屬性,默認事件爲Click事件。

  (5)複選框控件:該控件用於顯示選擇的狀態,即允許用戶從兩個值(如True或False)中選擇一個。如選擇則將顯示標記,默認屬性爲Value屬性,默認事件爲Click事件。

  (6)選項按鈕控件:該控件用於顯示多選項中每一項的選擇狀態,默認屬性爲Value屬性,默認事件爲Click事件。

  (7)切換按鈕控件:該控件用於顯示選擇狀態,默認屬性爲Value屬性,默認事件爲Click事件。

  (8)框架控件:該控件用於創建功能或視覺角度的控件組,默認事件爲Click事件。

  (9)命令按鈕控件:該控件用於啓動、結束或中斷操作,其Click事件是窗體編程中最常用的事件代碼,默認屬性爲Value屬性,默認事件爲Click事件。

  (10)表頭控件:該控件用於將一系列相關控件顯示爲一個多表的集合,默認屬性爲SelectedItem屬性,默認事件爲Change事件。

  (11) 多頁控件:該控件用於將多頁面的內容以單個控件的方式實現,在處理不同類別的大量信息時很有用,默認事件爲Change事件。

  (12)滾動條控件:該控件用於按滾動塊位置,返回或設置變量值,默認屬性爲Value屬性,默認事件爲Change事件。如需創建橫向或縱向的滾動條,可在窗體設計時橫向或縱向拖動滾動條控制點。

  (13)旋轉按鈕控件:該控件用於增加及減少變量數值,默認屬性爲Value屬性,默認事件爲Change事件。

  (14)圖像控件:該控件用於顯示圖片,其支持的圖片文件格式包括:bmp、cur、gif、ico、jpg和wmf等,默認事件爲Click事件。

  在VBA窗體設計中,可將一些開發中使用的控件全部選擇後,直接拖至工具箱中,工具箱會添加一個“控件組”,在窗體設計中可直接將該控件組放置於窗體,大大提高了效率(該特點爲VBA所獨有)。

  如開發者需使用VBA標準控件箱未提供的其他控件,可右鍵單擊工具箱,在出現的菜單中選擇“附加控件”命令,在出現的對話框中進行選擇即可。

  3.用戶窗體常用事件

  用戶窗體的常用事件和VB窗體有一定的區別。

  (1)Initialize事件:該事件發生在加載對象後和顯示對象前,通常在該事件中初始化變量值或設置控件的屬性。

  (2)QueryClose事件:該事件發生在用戶窗體關閉前,通常在該事件中檢查用戶窗體中未完成的操作。

  cancel參數:整型,如將該參數設置未非零值,則可阻止關閉用戶窗體。

  Closemode參數:該參數用於獲取觸發QueryClose事件的原因。

  (3)Terminate事件:該事件將所有引用的對象變量設置爲Nothing常量,即刪除對象的引用。該事件發生在卸載對象後。如非正常退出程序,則不會觸發。

  (五)類模塊
  VBA開發也提供了類模塊結構,使開發者可將常用操作通過類進行合理封裝,實現代碼的複用和程序的結構化。

  1.創建類模塊

  VBA中創建類模塊非常簡單,在VBA編輯器的工程資源管理器中右鍵單擊項目,在出現的菜單中選擇“插入→類模塊”命令,隨後在“工程資源管理器”中會出現添加的類模塊,默認名稱爲“類1”,單擊該類模塊,可設置其屬性,一般需設置其“Name”屬性,以方便使用。雙擊該類模塊,即可按窗體的操作方法來輸入代碼。

  2.類模塊常用事件

  類模塊中包含Initialize和Terminate二個事件。

  (1)Initialize事件:該事件用於初始化類模塊所用的數據。當程序中創建類模塊時觸發該事件。

  (2)Terminate事件:當程序中類實例從內存刪除時觸發該事件,且該事件僅在程序正常結束時觸發。

  三、Office XP開發對象知識詳解
  VBA程序的開發主要由大量的對象組成。這裏,我們精選了常用的Office VBA開發常用對象的知識,以方便讀者速查。

  (一)Word 2002開發對象
  1.Application對象

  該對象代表 Word 應用程序,通過該對象可訪問Word中的其他所有對象。

  (1)ActiveDocument屬性:返回Document對象,代表活動文檔。

  (2)ActivePrinter屬性:返回或設置當前打印機的名稱。

  (3)ActiveWindow屬性:返回Window對象,代表活動窗口。

  (4)Documents屬性:返回Documents集合,代表所有打開文檔。

  (5)Selection屬性:返回Selection對象,代表已選擇的範圍或插入點。

  (6)Windows屬性:返回Windows集合,代表所有文檔窗口。

  (7)Activate方法:用於激活指定的對象。

  (8)PrintOut方法:打印全部或部分的文檔。

  (9)Quit方法:用於退出Word程序。

  2.Document對象

  該對象代表Word中打開的文檔。通過“Documents(index)”的語法可獲取Document對象,其中index參數代表文檔的名稱或索引號,此外還可用ActiveDocument屬性獲取當前編輯的文檔。

  (1)AttachedTemplate屬性:返回Template對象,代表活動文檔關聯的模板。

  (2)BuiltInDocumentProperties屬性:返回DocumentProperties集合,代表指定文檔的所有內置屬性,如作者、主題或關鍵詞等。

  (3)Characters屬性:返回Characters集合,代表文檔中的字符。

  (4)Tables屬性:返回Tables集合,代表文檔中所有的表格。

  (5)CheckGrammar方法:檢查字符串是否存在語法錯誤。

  (6)CheckSpelling方法:用於檢查字符串是否存在拼寫錯誤。

  (7)ComputeStatistics方法:用於獲取指定文檔的統計數據,如字數、頁數等。

  (8)PrintPreview方法:在打印預覽和視圖方式間進行切換。

  (9)Save方法:用於保存文檔或模板。

  (10)Undo方法:用於撤消文檔的最後一次操作。

  3.Bookmark對象

  該對象是Bookmarks集合中的元素,代表文檔中的書籤。通過“Bookmarks( index )”的語法可獲取Bookmark對象,其中index參數代表書籤名稱或索引號。

  (1)Select方法:用於選擇指定的書籤。

  (2)Delete方法:用於刪除指定的書籤。

  4.Field對象

  該對象是Fields集合中的元素,代表文檔中的域。通過“Fields(index) ”的語法可獲取Field對象。

  5.Template對象

  該對象是Templates集合中的元素,代表文檔模板。通過“Templates(index)”的語法可獲取Template對象。

  6.FontNames對象

  該對象代表有效的字體名稱列表。通過FontNames、LandscapeFontNames 或 PortraitFontNames屬性可獲取FontNames對象。

  7.Options對象

  該對象代表 Word 的應用程序和文檔選項。

  8.AutoTextEntries集合對象和AutoTextEntry對象

  AutoTextEntries集合對象由AutoTextEntry對象組成,代表模板中所有的“自動圖文集”詞條。AutoTextEntry對象代表單一的“自動圖文集”詞條。

  Insert方法:用於在指定的範圍中通過插入“自動圖文集”詞條的方式來替換原內容。

  9.Selection對象

  該對象代表當前文檔的選擇內容,可爲區域或插入點,每個文檔僅有一個 Selection對象,且任意時刻僅可激活一個Selection對象,通過Selection屬性可獲取Selection對象。

  (1)Text屬性:返回或設置所選內容中的文本。

  (2)Copy方法:將指定對象複製到剪貼板。

  (3)Paste方法:將剪貼板內容粘貼至選擇區域。

  (4)TypeParagraph方法:用於插入新段落,等同於在編輯時按回車鍵。

  (5)TypeText方法:用於插入指定的文本。

  (6)WholeStory方法:用於擴展選擇內容,幷包含整個文字部分。

  (7)GoTo方法:將插入點移至指定位置。

  (8)HomeKey方法:等同於按下“Home”鍵。

  (9)EndKey方法:等同於按下“End”鍵。

  (二)Excel 2002開發對象
  1.Application對象

  該對象代表Excel應用程序,通過該對象可訪問Excel中的其他所有對象。

  (1)ActiveCell屬性:返回Range對象,代表活動窗口或指定窗口的活動單元格。

  (2)ActiveChart屬性:返回Chart對象,代表活動圖表。

  (3)ActiveSheet屬性:返回WorkSheet對象,代表活動工作簿中的活動工作表。

  (4)ActiveWorkbook屬性:返回Workbook對象,代表活動的工作簿。

  (5)Cells屬性:返回 Range對象,代表活動工作簿中所有單元格。

  (6)Charts屬性:返回Sheets集合,代表活動工作簿中所有圖表。

  (7)Range屬性:返回Range對象,代表單元格或單元格區域。

  (8)Sheets屬性:返回Sheets集合,代表當前工作簿的所有工作表。

  (9)StatusBar屬性:返回狀態欄的文本。

  (10)Workbooks屬性:返回Workbooks集合,代表所有打開的工作簿。

  (11)Worksheets屬性:返回Sheets集合,代表活動工作簿的所有工作表。

  (12)Calculate方法:用於對指定區域的單元格進行計算。

  (13)Evaluate方法:用於將字符串的值進行轉義操作,即可將以字符串表示的運算式進行求解的操作。

  (14)InputBox方法:用於顯示接收輸入的對話框,並返回對話框中輸入的信息。

  (15)Quit方法:用於退出Excel應用程序。

  2.AddIn對象

  該對象代表加載宏,通過“AddIns(index)”語法可返回AddIn對象,其中index參數爲加載宏標題或編號。

  FullName屬性:返回加載宏的文件名。

  3.Chart對象

  該對象代表工作簿中的圖表,包括嵌入式圖表和單獨的圖表。

  (1)ChartArea屬性:返回ChartArea對象,代表指定圖表中的全部圖表區域。

  (2)ChartTitle屬性:返回ChartTitle對象,代表指定圖表的標題。

  (3)ChartType屬性:返回或設置圖表的類型。

  (4)DataTable屬性:返回DataTable對象,代表圖表數據表。

  (5)Walls屬性:返回Walls對象,代表三維圖表的背景牆。

  4.Workbook對象

  該對象代表工作簿。

  (1)Styles屬性:返回Styles集合,代表指定工作簿的所有樣式。

  (2)Add方法:用於新建工作簿,並將其設置爲活動工作簿。

  (3)Open方法:用於打開工作簿。

  (4)OpenText方法:用於載入文本文件,並將其進行分列處理,然後在工作表中插入經過分列處理的文本數據。

  5.Worksheet對象

  該對象代表工作表,通過“Worksheets(index)”的語法可獲取Worksheet對象,其中index參數工作表索引號或名稱。

  (1)AutoFilter屬性:用於設置是否進行篩選。

  (2)UsedRange屬性:返回Range對象,代表指定工作表中的已用區域。

  (3)PrintOut方法:用於打印指定的對象。

  (4)PrintPreview方法:將切換之打印預覽視圖。

  (5)Select方法:用於選擇指定的對象。

  6.Range對象

  該對象代表選擇區域,是Excel開發中一個常用的對象。

  (1)Address屬性:返回對指定區域的引用名稱。

  (2)Areas屬性:返回Areas集合,代表多重選擇區域中的所有區域。

  (3)Column屬性:返回第一塊指定區域中的第一列的序號。

  (4)Columns屬性:返回Range對象,代表指定區域中的所有列。

  (5)ColumnWidth屬性:返回或設置指定區域中所有列的列寬。

  (6)Formula屬性:用於設置Range對象使用的公式。

  (7)MergeArea屬性:返回Range對象,代表指定單元格的合併範圍。

  (8)MergeCells屬性:返回區域中是否包含合併單元格。

  (9)NumberFormat屬性:返回或設置指定對象的格式代碼。

  (10)Row屬性:返回第一塊指定區域中的第一行的序號。

  (11)Rows屬性:返回Range對象,代表指定區域中的所有行。

  (12)Activate方法:用於激活對象。

  (13)ApplyNames方法:用於將名稱應用於指定的單元格。

  (14)AutoFill方法:用於對指定的單元格進行自動填充。

  (15)AutoFit方法:用於將列寬和行高調整爲適當值。

  (16)Find方法:用於在區域內查找特定信息,並返回代表第一個包含所查找信息的單元格。

  (17)Merge方法:用於從指定的Range對象中創建合併單元格。

  (18)Replace方法:用於在指定區域內查找和替換。

  (19)Subtotal方法:用於創建指定區域內的分類彙總。

  (三)PowerPoint 2002開發對象
  1.Application對象

  該對象代表PowerPoint應用程序,通過該對象可訪問PowerPoint中的其他所有對象。

  (1)Active屬性:返回指定窗格是否被激活。

  (2)ActivePresentation屬性:返回Presentation對象,代表活動窗口中打開的演示文稿。

  (3)ActiveWindow屬性:返回DocumentWindow對象,代表當前文檔窗口。

  (4)Presentations屬性:返回Presentations集合,代表所有打開的演示文稿。

  (5)SlideShowWindows屬性:返回 SlideShowWindows集合,代表所有打開的幻燈片放映窗口。

  (6)Quit方法:用於退出PowerPoint程序。

  2.DocumentWindow對象

  該對象代表文檔窗口。使用“Windows(index) ”語法可返回DocumentWindow對象。

  (1)ActivePane屬性:返回Pane對象,代表文檔窗口中的活動窗格。

  (2)Panes屬性:返回Panes集合,代表文檔窗口中的所有窗格。

  (3)ViewType屬性:返回指定的文檔窗口內的視圖類型。

  3.Presentation對象

  該對象代表演示文稿,通過“Presentations(index)”語法可返回Presentation對象。

  (1)BuiltInDocumentProperties屬性:返回DocumentProperties集合,代表演示文稿的所有文檔屬性。

  (2)ColorSchemes屬性:返回ColorSchemes 集合,代表演示文稿的配色方案。

  (3)PageSetup屬性:返回PageSetup對象,用於控制演示文稿的幻燈片頁面設置屬性。

  (4)SlideMaster屬性:返回幻燈片母版對象。

  (5)SlideShowSettings屬性:返回SlideShowSettings對象,代表演示文稿的幻燈片放映設置。

  (6)SlideShowWindow屬性:返回幻燈片放映窗口對象。

  (7)AddTitleMaster方法:爲演示文稿添加標題母版。

  (8)ApplyTemplate方法:對演示文稿應用設計模板。

  4.SlideShowWindow對象

  該對象代表幻燈片放映窗口。

  IsFullScreen屬性:用於設置是否全屏顯示幻燈片放映窗口。

  5.Master對象

  該對象代表幻燈片母版、標題母版、講義母版或備註母版。

  TextStyles屬性:爲幻燈片母版返回TextStyles 集合,代表標題文本、正文文本和默認文本。

  6.Slide對象

  該對象代表幻燈片。

  (1)SlideID屬性:返回幻燈片的唯一標識符。

  (2)SlideIndex屬性:返回幻燈片在Slides集合中的索引號。

  7.SlideShowView對象

  該對象代表幻燈片放映窗口中的視圖。

  (1)AcceleratorsEnabled屬性:用於設置是否允許在幻燈片放映時使用快捷鍵。

  (2)CurrentShowPosition屬性:返回當前幻燈片在放映中的位置。

  (3)DrawLine方法:在指定幻燈片放映視圖中繪製直線。

  (4)EraseDrawing方法:用於清除通過DrawLine方法或繪圖筆工具在放映中繪製的直線。

  (5)GotoSlide方法:用於切換指定幻燈片。

  四、VBA綜合開發實例溫馨賀卡嚮導
  (一)例程分解
  本例程是一個簡單的賀卡嚮導,可直接運行並可輔助生成簡單的賀卡。程序主界面與Word的標準嚮導程序類似,單擊“上一步”和“下一步”按鈕或直接單擊窗體左側的切換按鈕均可直接跳轉至相應步驟。單擊“取消”按鈕將關閉嚮導窗體,如圖4所示。



  單擊“下一步”按鈕切換至下一頁,在該頁面中可選擇賀卡的節日並輸入發送者和接受者的姓名,如圖5所示。



  單擊“下一步”按鈕切換至下一頁,在該頁面中可輸入賀詞,如圖6所示。



  單擊“下一步”按鈕切換至嚮導程序的末一頁,單擊“完成”按鈕即可生成文檔。生成的文檔將包含將用戶在前述步驟中填寫的信息,生成一份簡單的賀卡。

  (二)程序知識點
  1.嚮導的編制原理

  嚮導程序的本質即前述的Word模板文件(DOT文件),唯一區別在於其擴展名爲“WIZ”,因此編制嚮導程序首先需編制模板並調試代碼,在調試無誤後將擴展名改爲“WIZ”即可。嚮導編制的常規步驟如下所述:

  (1)創建嚮導所需的自動圖文集:嚮導所需的自動圖文集是包含書籤的自動圖文集,最後生成文檔時即調用了預保存的圖文集,而在Word中用於定位的書籤對象,可在需填寫輸入內容的位置上幫助程序實現定位並替換。該步驟是編制嚮導程序的關鍵。

  (2)編輯窗體和模塊:嚮導程序需通過窗體來實現交互功能,因此通過合理運用控件,完全可設計出美觀易用的窗體,然後對窗體的控件進行事件編程,實現流程控制。窗體設計完畢後,需通過模塊來保存通用的功能,常用的功能包含生成文檔、替換書籤和刪除書籤等。

  (3)設置嚮導程序入口:嚮導程序需通過特定的事件來觸發,建議在“ThisDocument”對象的“New”事件中輸入調用嚮導程序入口的代碼。Document對象的事件包括New事件(在創建基於模板的文檔時觸發。按功能分析,嚮導程序入口即通過該事件執行)、Open 事件(在打開文檔時觸發)和Close事件(在關閉文檔時觸發)。

  2.界面設計知識點

  (1)嚮導程序需逐步引導用戶,因此建議使用多頁控件(MultiPage)實現界面切換。

  (2)VBA的窗體設計中未提供類似VB的控件數組功能,因此需訪問Controls集合對象來控制一些外觀和功能均類似的控件。

  (3)由於從前述知識點可得嚮導程序本質爲模板文件,因此開發者可直接打開Word已提供的嚮導程序(如“實用文體嚮導”等),然後通過工程資源管理器導出其界面窗體,然後在此基礎上進行參考和修改,可大大提高編制的效率。

  (4)Controls集合:窗體的Controls集合代表其包含的全部控件。Controls集合中的每個控件均有唯一的索引,也可通過控件名稱來引用。在嚮導程序中,爲有效地控制功能和外觀均類似的控件(如切換按鈕),可通過名稱引用來枚舉訪問窗體的Controls集合,即可控制這些控件。

  (5)多頁控件:多頁控件(MultiPage)是Pages集合的容器,每個多頁控件均包含一個或多個Page對象,其常用屬性和方法如下:

  Value屬性:爲多頁控件默認屬性,返回當前活動頁面的索引號,從“0”開始編號,依此類推。

  Style屬性:用於設置多頁控件標籤的顯示風格,在嚮導中建議設置爲“2”(即不顯示錶頭)。

  (6)Page對象:該對象代表多頁控件的頁面。每個 Page對象均可放置不同的控件,以實現多界面切換的效果,第一個Page對象默認名稱爲“Page1”,其常用屬性和方法如下:

  Picture屬性:用於設置頁面的背景圖片。

  PictureTiling屬性:用於設置是否平鋪圖片。

  PictureSizeMode屬性:用於設置顯示背景圖片的方式。

  (三)程序實現步驟
  1.創建嚮導所需的自動圖文集

  通過前述內容可得創建嚮導所需的自動圖文集是關鍵的步驟,因此首先在編輯界面中輸入相關的文字,然後在需插入內容的位置添加書籤,最後選擇全部內容,以“hk”命名並保存於模板的自動圖文集中。如圖7所示:



  2.編制窗體

  在VBA編輯器的工程資源管理器中添加窗體,放置多頁控件、標籤、文本框、列表框等控件(也可採用前述的導入並修改的方法來設計窗體),由於該窗體使用的控件較多,限於篇幅,不在逐一介紹,可按效果圖自行設計,本文僅對一些需在代碼中使用的控件進行介紹。

  首先切換至多頁控件的第二頁,該頁面中需編程的控件位置和名稱如圖8所示:



  如圖8所示,其中“frmHKWiz”爲用戶窗體,“Page1”爲多頁控件的頁面對象,“txtfsz”和“txtjsz”均爲文本框控件,“shpMap0”至“shpMap3”、“lblMap0”至“lblMap3”均爲Label控件,“lstjr”爲列表框控件。切換至多頁控件的第三頁,該頁面中需編程的控件位置和名稱如圖9所示:



  如圖9所示,其中“Page2”爲多頁控件的頁面對象,“shpChartPath”爲標籤控件,“txthc”爲文本框控件,“cmdCancel”、“cmdBack”、“cmdNext”和“cmdFinish”均爲命令按鈕控件。

  窗體界面設計完畢後,切換至代碼編輯窗口,首先輸入常量聲明,代碼如下所示:

  '代表頁面數量

  Const P_Count = "3"

  '標籤名稱的常量

  Const Const_LBL = "lblMap"

  '標籤名稱的常量

  Const Const_SHP = "shpMap"

  然後輸入公共變量,代碼如下所示:

  '用於保存當前頁面編號的變量

  Dim indexPanel As Integer

  輸入自定義的過程代碼,如下所示:

  '初始化控件的過程

  Private Sub init_Controls()

  With lstjr

  .AddItem "聖誕節"

  .AddItem "中秋節"

  .AddItem "國慶節"

  End With

  End Sub

  '切換頁面的過程

  Private Sub changepage(iNewPanel As Integer)

  If indexPanel = iNewPanel Or fWizardCallBack Then

  Exit Sub

  End If

  '通過Controls集合對象來實現頁面切換效果

  frmHKWiz.Controls(Const_SHP & indexPanel).BackColor = vbWhite

  frmHKWiz.Controls(Const_LBL & indexPanel).FONTBOLD = False

  indexPanel = iNewPanel

  frmHKWiz.Controls(Const_SHP & indexPanel).BackColor = vbGreen

  frmHKWiz.Controls(Const_LBL & indexPanel).FONTBOLD = True

  mpgWizardPage.Value = indexPanel

  End Sub

  最後輸入各控件的事件代碼,如下所示:

  '用於模擬切換按鈕的標籤單擊事件

  Private Sub lblMap0_Click()

  changepage (0)

  End Sub

  Private Sub lblMap1_Click()

  changepage (1)

  End Sub

  Private Sub lblMap2_Click()

  changepage (2)

  End Sub

  Private Sub lblMap3_Click()

  changepage (3)

  End Sub

  Private Sub shpMap0_Click()

  changepage (0)

  End Sub

  Private Sub shpMap1_Click()

  changepage (1)

  End Sub

  Private Sub shpMap2_Click()

  changepage (2)

  End Sub

  Private Sub shpMap3_Click()

  changepage (3)

  End Sub

  Private Sub shpMap4_Click()

  changepage (4)

  End Sub

  '“上一步”按鈕單擊事件

  Private Sub cmdBack_Click()

  If indexPanel > 0 Then

  changepage (indexPanel - 1)

  End If

  End Sub

  '“下一步”按鈕單擊事件

  Private Sub cmdNext_Click()

  If indexPanel < P_Count Then

  changepage (indexPanel + 1)

  End If

  End Sub

  '“取消”按鈕單擊事件

  Private Sub cmdCancel_Click()

  '關閉窗體

  Unload Me

  End Sub

  '“完成”按鈕單擊事件

  Private Sub cmdFinish_Click()

  Application.ScreenUpdating = False

  '調用模塊中創建文檔的過程,即窗體和模塊的接口過程

  CreateNewDoc (True)

  End Sub

  '窗體初始化事件

  Private Sub UserForm_Initialize()

  indexPanel = 0

  mpgWizardPage.Value = 0

  changepage (0)

  init_Controls

  End Sub

  3.編制模塊

  模塊用於保存嚮導程序中公用的代碼,在工程資源管理器中添加標準模塊,命名爲“Common”,然後輸入代碼(也可模仿窗體的導入操作,將Word提供的嚮導程序包含的模塊導入,參考並使用其中的很多過程),如下所示:

  '啓動向導,即嚮導程序的入口

  Public Sub StartWizard()

  '顯示窗體

  frmHKWiz.Show

  End Sub

  '創建新文檔的過程,通過“fDummy”參數可使該Public類型的過程不在Word的“宏”列表中出現。

  Public Sub CreateNewDoc(fDummy As Boolean)

  Application.ScreenUpdating = False

  '設置鼠標爲“等待”形狀

  System.Cursor = wdCursorWait

  '獲取嚮導程序的模板

  Set objWizTemplate = ActiveDocument.AttachedTemplate

  Application.DisplayAutoCompleteTips = True

  '插入已創建的自動圖文集

  ActiveDocument.AttachedTemplate.AutoTextEntries("hk").Insert Selection.Range, True

  ActiveDocument.Select

  '調用替換書籤的過程,將窗體中輸入的內容在文檔中進行替換

  ReplaceBookmark "jr", frmHKWiz.lstjr.Text

  ReplaceBookmark "fsz", frmHKWiz.txtfsz.Text

  ReplaceBookmark "jsz", frmHKWiz.txtjsz.Text

  ReplaceBookmark "hc", frmHKWiz.txthc.Text

  '設置新文檔的屬性

  With ActiveDocument

  .SpellingChecked = True

  .GrammarChecked = True

  .UndoClear

  End With

  Application.DisplayAutoCompleteTips = True

  Selection.HomeKey wdStory

  '恢復默認鼠標形狀

  System.Cursor = wdCursorNormal

  Application.ScreenUpdating = True

  '關閉窗體

  Unload frmHKWiz

  '調用刪除所有書籤的過程

  deleteallbookmark

  End Sub

  '替換書籤內容的過程

  Private Sub ReplaceBookmark(which As String, what As String)

  If Len(what) = 0 Then

  what = ""

  End If

  '選擇指定的書籤

  Selection.GoTo what:=wdGoToBookmark, Name:=which

  '替換內容

  Selection.TypeText what

  End Sub

  '刪除所有書籤的過程

  Private Sub deleteallbookmark()

  Dim bm As Bookmark

  '遍歷所有的書籤

  For Each bm In ActiveDocument.Bookmarks

  '刪除書籤

  bm.Delete

  Next

  End Sub

  4.設置嚮導入口

  代碼編寫完畢後,在工程資源管理器中切換至“ThisDocument”對象,輸入事件代碼,如下所示:

  Private Sub Document_New()

  '調用模塊(Common)中啓動向導的過程

  Common.StartWizard

  End Sub

  5.後續工作

  嚮導程序編制、調試無誤後,可將其擴展名改爲“WIZ”,然後搜索“Normal.dot”文件所在的文件夾,並將該向導程序放置於該目錄,隨後啓動Word XP後即可在“模板”窗體的“常用”欄中顯示該向導的圖標。 
 
發佈了1 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章