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