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

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