使用一个包含VBA代码的Word模板文件,通过“加载”方式直接运行,运行后将在Word
XP的主界面中新增菜单和工具栏,并提供了几套适合不同工作环境的界面布局,单击相应菜单即可实现不同风格界面布局的切换。
标准风格:显示主菜单栏以及常用、格式两个工具栏,并将文本编辑区设置为“蓝底白字”。
简单风格:仅显示主菜单栏和程序新建的工具栏,并将文本编辑区恢复为“白底黑字”,如图1所示。单击工具栏上的按钮,则会显示对话框。
绘图和制表风格:显示主菜单栏和常用、格式、绘图、图片、符号栏以及表格和边框工具栏等,并将文本编辑区恢复为“白底黑字”。

多风格界面的实现方法:
一、创建工具栏和菜单的相关知识:
1.CommandBars集合
Office软件中,每个软件所有的工具栏均可用该集合来代表,该集合可通过名称或索引号来指定菜单栏或工具栏,如“CommandBars("Formatting")”,即通过名称“Formatting”指定了“格式工具栏”。Add方法用于新建工具栏,并返回CommandBar对象。
2.CommandBar对象
该对象代表工具栏,新建工具栏的控件均以该对象为载体,是VBA工具栏开发的核心对象,其常用方法和属性如下:
Position属性:用于设置工具栏的位置,可通过VBA常量将工具栏的位置设置为置顶、居左、居右、置下或浮动。
Visible属性:用于设置工具栏是否可见。
Enabled属性:用于设置工具栏是否可用。
Reset方法:将内置工具栏的设置重置为默认设置,删除其中的自定义控件,在恢复软件原有工具栏或菜单时非常有用。
3.CommandBarPopup 对象
该对象代表工具栏中的一个弹出式控件,其实Office软件的菜单也可理解为一个弹出式的控件,而菜单栏可以视为“另类”的工具栏。因此,通过该对象即可添加菜单栏,方法和添加工具栏类似。
4.CommandBarButton对象
该对象代表工具栏的按钮控件,是常用的工具栏二次开发控件,其常用方法和属性如下:
OnAction属性:用于设置VBA代码过程名(该代码过程不可使用参数),该过程在单击按钮后运行。
Style属性:用于设置工具栏按钮的显示方式,可通过VBA常量进行设置。
FaceId属性:用于设置工具栏按钮的图标编号,即设置工具栏按钮的外观。自定义图标的工具栏按钮,其FaceId属性值需设置为0。
BeginGroup属性:用于设置控件是否分组显示。
5.CommandBarComboBox对象
该对象代表工具栏中的组合框、下拉框或文本框控件,也是常用的工具栏二次开发控件。
二、WORD自动宏
为使模板中的VBA代码可在某些特定操作中(如加载或打开时)自动执行,必须通过VBA提供的自动宏来实现。
自动宏是一些特殊的宏,这些宏可在执行特定操作时运行(类似DOS时代在系统启动时执行的“AutoExec.bat”文件)。以Word
XP为例,其提供的自动宏如下所述:
AutoExec宏:启动Word 或加载全局模板触发。
AutoNew宏:生成新文档时触发。
AutoOpen宏:打开已有文档时触发。
AutoClose宏:关闭文档时触发。
AutoExit宏:退出Word XP或卸载全局模板时触发。
正如其他宏,自动宏可以保存于 Normal 模板、其他模板或文档之中。唯一的例外是:AutoExec 宏,它只有保存在
Startup 文件夹的 Normal 模板或共用模板中才能自动运行。
在命名冲突的情况下(多个自动宏名相同),Word 运行上下文中最近的自动宏。例如,如果同时在文档和附加模板中建立了 AutoClose
宏,只有文档中的宏能够运行。如在 Normal 模板中建立了 AutoNew 宏,只有当文档或其附加模板中没有名为 AutoNew
的宏时,该自动宏才能运行。
如果用户按下 Shift
键可以终止宏的运行。例如,新建一个文档(该文档基于包含 AutoNew 宏的模板),按下 Shift 键可以终止 AutoNew
宏的运行。方法是按下 Shift
键的同时单击【文件】菜单下【新建】对话框中的【确定】按钮,直到显示新文档。在运行可能触发自动宏的宏时,可用下列指令终止自动宏的运行。
WordBasic.DisableAutoMacros
注意:
宏病毒就是利用自动宏的特点来自动进行传播的,并不需要人工运行。
三、新建工具栏和自定义菜单的代码:
录制“宏”之后,在VBA的工程资源管理器中将自动添加一个名称为“NewMacros”的模块,双击该模块的图标,即可显示代码编辑窗口。
1.定义一些全局变量
Dim Obj_Toolbar As CommandBar '代表工具栏的变量
Dim Obj_Menu As CommandBarPopup '代表菜单的变量
Dim Obj_Toolbar_button As CommandBarButton '代表菜单项和按钮的变量
2.编制生成工具栏和菜单的子程序
Sub addbutton() '创建工具栏和菜单并设置属性的子程序
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" '设置单击菜单项执行的子程序名称
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 = "简单风格"