使用一個包含VBA代碼的Word模板文件,通過“加載”方式直接運行,運行后將在Word
XP的主界面中新增菜單和工具欄,并提供了幾套適合不同工作環(huán)境的界面布局,單擊相應菜單即可實現(xiàn)不同風格界面布局的切換。
標準風格:顯示主菜單欄以及常用、格式兩個工具欄,并將文本編輯區(qū)設置為“藍底白字”。
簡單風格:僅顯示主菜單欄和程序新建的工具欄,并將文本編輯區(qū)恢復為“白底黑字”,如圖1所示。單擊工具欄上的按鈕,則會顯示對話框。
繪圖和制表風格:顯示主菜單欄和常用、格式、繪圖、圖片、符號欄以及表格和邊框工具欄等,并將文本編輯區(qū)恢復為“白底黑字”。

多風格界面的實現(xiàn)方法: 
一、創(chuàng)建工具欄和菜單的相關知識:
 
1.CommandBars集合
Office軟件中,每個軟件所有的工具欄均可用該集合來代表,該集合可通過名稱或索引號來指定菜單欄或工具欄,如“CommandBars("Formatting")”,即通過名稱“Formatting”指定了“格式工具欄”。Add方法用于新建工具欄,并返回CommandBar對象。
2.CommandBar對象
該對象代表工具欄,新建工具欄的控件均以該對象為載體,是VBA工具欄開發(fā)的核心對象,其常用方法和屬性如下:
Position屬性:用于設置工具欄的位置,可通過VBA常量將工具欄的位置設置為置頂、居左、居右、置下或浮動。
Visible屬性:用于設置工具欄是否可見。
Enabled屬性:用于設置工具欄是否可用。
Reset方法:將內置工具欄的設置重置為默認設置,刪除其中的自定義控件,在恢復軟件原有工具欄或菜單時非常有用。
3.CommandBarPopup 對象
  該對象代表工具欄中的一個彈出式控件,其實Office軟件的菜單也可理解為一個彈出式的控件,而菜單欄可以視為“另類”的工具欄。因此,通過該對象即可添加菜單欄,方法和添加工具欄類似。
4.CommandBarButton對象
  該對象代表工具欄的按鈕控件,是常用的工具欄二次開發(fā)控件,其常用方法和屬性如下:
OnAction屬性:用于設置VBA代碼過程名(該代碼過程不可使用參數(shù)),該過程在單擊按鈕后運行。
 
Style屬性:用于設置工具欄按鈕的顯示方式,可通過VBA常量進行設置。
FaceId屬性:用于設置工具欄按鈕的圖標編號,即設置工具欄按鈕的外觀。自定義圖標的工具欄按鈕,其FaceId屬性值需設置為0。
BeginGroup屬性:用于設置控件是否分組顯示。
5.CommandBarComboBox對象
  該對象代表工具欄中的組合框、下拉框或文本框控件,也是常用的工具欄二次開發(fā)控件。
二、WORD自動宏
  為使模板中的VBA代碼可在某些特定操作中(如加載或打開時)自動執(zhí)行,必須通過VBA提供的自動宏來實現(xiàn)。
  自動宏是一些特殊的宏,這些宏可在執(zhí)行特定操作時運行(類似DOS時代在系統(tǒng)啟動時執(zhí)行的“AutoExec.bat”文件)。以Word
XP為例,其提供的自動宏如下所述:
AutoExec宏:啟動Word 或加載全局模板觸發(fā)。
AutoNew宏:生成新文檔時觸發(fā)。
AutoOpen宏:打開已有文檔時觸發(fā)。
AutoClose宏:關閉文檔時觸發(fā)。
AutoExit宏:退出Word XP或卸載全局模板時觸發(fā)。
 
  正如其他宏,自動宏可以保存于 Normal 模板、其他模板或文檔之中。唯一的例外是:AutoExec 宏,它只有保存在
Startup 文件夾的 Normal 模板或共用模板中才能自動運行。
   
在命名沖突的情況下(多個自動宏名相同),Word 運行上下文中最近的自動宏。例如,如果同時在文檔和附加模板中建立了 AutoClose
宏,只有文檔中的宏能夠運行。如在 Normal 模板中建立了 AutoNew 宏,只有當文檔或其附加模板中沒有名為 AutoNew
的宏時,該自動宏才能運行。
    如果用戶按下 Shift
鍵可以終止宏的運行。例如,新建一個文檔(該文檔基于包含 AutoNew 宏的模板),按下 Shift 鍵可以終止 AutoNew
宏的運行。方法是按下 Shift
鍵的同時單擊【文件】菜單下【新建】對話框中的【確定】按鈕,直到顯示新文檔。在運行可能觸發(fā)自動宏的宏時,可用下列指令終止自動宏的運行。
   
WordBasic.DisableAutoMacros
注意:
   
宏病毒就是利用自動宏的特點來自動進行傳播的,并不需要人工運行。
 
 三、新建工具欄和自定義菜單的代碼:
錄制“宏”之后,在VBA的工程資源管理器中將自動添加一個名稱為“NewMacros”的模塊,雙擊該模塊的圖標,即可顯示代碼編輯窗口。
1.定義一些全局變量
Dim Obj_Toolbar As CommandBar '代表工具欄的變量
Dim Obj_Menu As CommandBarPopup '代表菜單的變量
Dim Obj_Toolbar_button As CommandBarButton '代表菜單項和按鈕的變量
2.編制生成工具欄和菜單的子程序
Sub addbutton() '創(chuàng)建工具欄和菜單并設置屬性的子程序
    deletebutton
'調用刪除工具欄和菜單的子程序
    Set
Obj_Toolbar = Application.CommandBars.Add("My_Custom_Bar")
'新建工具欄,“My_Custom_Bar”代表工具欄的名稱
    Set Obj_Menu
= Obj_Toolbar.Controls.Add(Type:=msoControlPopup, ID:=1)
'在工具欄上新建下拉菜單,“ID:=1”代表該工具欄的功能由用戶自定義,下同
    With
Obj_Menu '設置下拉菜單的屬性
       
.Caption = "風格切換" '設置標題
       
.BeginGroup = True '設置分組
    End
With
    Set
Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton,
ID:=1) '新建菜單項,下同
    With
Obj_Toolbar_button '設置菜單項的屬性,下同
       
.Caption = "標準風格"
       
.BeginGroup = True
       
.OnAction = "Standard_Style" '設置單擊菜單項執(zhí)行的子程序名稱
    End
With
    Set
Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton,
ID:=1) '新建其他的菜單項,并設置屬性
    With
Obj_Toolbar_button
       
.Caption = "簡單風格"
       
.BeginGroup = True
       
.OnAction = "Simple_Style"
    End
With
    Set
Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton,
ID:=1)
    With
Obj_Toolbar_button
       
.Caption = "繪圖和制表風格"
       
.BeginGroup = True
       
.OnAction = "Draw_Table_Style"
    End
With
    Set
Obj_Toolbar_button =
Obj_Toolbar.Controls.Add(Type:=msoControlButton, ID:=1)
'新建工具欄按鈕
    With
Obj_Toolbar_button '設置按鈕的屬性
       
.Caption = "關于"
       
.Style = msoButtonIconAndCaption
       
.FaceId = 984
       
.OnAction = "Show_Msg"
    End
With
    With
Obj_Toolbar '設置工具欄的屬性
       
.Visible = True '工具欄可視
       
.Enabled = True '工具欄可用
       
.Position = msoBarTop '工具欄置頂
    End
With
    Set Obj_Menu
= Application.CommandBars("Menu
Bar").Controls.Add(Type:=msoControlPopup, ID:=1) '在Word
XP的主菜單中新建菜單,“Menu Bar”代表Word XP主菜單的名稱
    With
Obj_Menu '設置新建菜單的屬性
       
.Caption = "風格切換"
    End
With
    Set
Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton,
ID:=1) '在新建菜單中添加菜單項,下同
    With
Obj_Toolbar_button '設置新建菜單項的屬性,下同
       
.Caption = "標準風格"
       
.BeginGroup = True
       
.OnAction = "Standard_Style"
    End
With
    Set
Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton,
ID:=1) '新建其他的菜單項,并設置屬性
    With
Obj_Toolbar_button
       
.Caption = "簡單風格"