分享

用VBA自定义WORD菜单和工具栏,实现多风格界面

 飞来山上 2015-12-28

用VBA自定义WORD菜单和工具栏,实现多风格界面

(2011-06-26 08:26:05)

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

一、创建工具栏和菜单的相关知识:

 

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 = "简单风格"
        .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
End Sub
3.编制删除工具栏和菜单的子程序
Sub deletebutton() '删除工具栏和菜单的子程序
    Dim tempbar As CommandBar '定义临时工具栏变量
    On Error Resume Next '该语句用于忽略错误
    Application.CommandBars("Menu Bar").Reset '重新设置Word XP的主菜单,即删除新建的菜单
    For Each tempbar In Application.CommandBars '通过“For Each…Next”语句遍历Word XP所有的工具栏
        If tempbar.Name = "My_Custom_Bar" Then '如名称和新建的工具栏相同
            tempbar.Visible = False '设置为不可视
            tempbar.Delete '删除该工具栏
        End If
    Next
End Sub

4。编写控件和菜单项对应的事件代码
'“简单风格”子程序,添加“Private”关键字用于将该子程序设置为局部型,下同
Private Sub Simple_Style()
    resetall '调用重新设置所有工具栏的子程序,下同
    '进行“简单风格”相对应的操作,在前述内容中已进行了解读,下同
    CommandBars("Standard").Visible = False
    CommandBars("Formatting").Visible = False
    CommandBars("Drawing").Visible = False
    Options.BlueScreen = False
End Sub
'“标准风格”子程序
Private Sub Standard_Style()
    resetall
    CommandBars("Standard").Visible = True
    CommandBars("Formatting").Visible = True
    Options.BlueScreen = True
End Sub
'“绘图和制表风格”子程序
Private Sub Draw_Table_Style()
    resetall
    CommandBars("Standard").Visible = True
    CommandBars("Formatting").Visible = True
    CommandBars("Drawing").Visible = True
    CommandBars("Tables and Borders").Visible = True
    CommandBars("符号栏").Visible = True
    CommandBars("Picture").Visible = True
    Options.BlueScreen = False
End Sub
 5. 编写辅助的子程序
  上达三段代码中,均需调用一个重新设置所有工具栏的子程序,该子程序的功能为设置所有相关工具栏为不可视,然后按需要显示相关的工具栏,代码如下所示:

'重新设置所有工具栏的子程序
Private Sub resetall()
    '以下代码很容易理解,可通过修改前面录制的“宏”代码来编写
    CommandBars("Standard").Visible = False
    CommandBars("Formatting").Visible = False
    CommandBars("Drawing").Visible = False
    CommandBars("Tables and Borders").Visible = False
    CommandBars("符号栏").Visible = False
    CommandBars("Picture").Visible = False
    Options.BlueScreen = False
End Sub

 6. 编写辅助的子程序
  工具栏按钮单击后需通过子程序来显示对话框,代码如下所示:
Private Sub Show_Msg()
    '调用“MsgBox”函数来显示对话框,可参见VBA的帮助
    MsgBox "欢迎来到VBA的世界!", vbInformation, "信息"
End Sub

7. 保存相应的格式

    为实现打开文件时自动运行代码并在关闭时恢复Word的原有设置,需将其保存为模板。然后在代码模块中添加“AutoExec”自动宏,并通过该宏调用前面创建的“addbutton”过程,此外还需添加“AutoExit”自动宏,并通过该宏调用前面创建的“deletebutton”过程,代码如下所示:
Sub AutoExec()
    addbutton
End Sub
Sub AutoExit()
    deletebutton
End Sub


参考:http://school./office/word/2006-07-04/1151991787d7933.shtml

分享:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多