您的当前位置:首页自定义用户界面

自定义用户界面

来源:小侦探旅游网
第9章 自定义Excel 2007界面

第9章 自定义Excel 2007界面

Excel 2003及以前版本使用菜单栏和工具栏进行操作,在Excel 2007中引进行功能区(RibbonX)。本章实例分别介绍定制这两类控制的方法。

9.1 使用工具栏对象

命令栏包括菜单栏和工具栏,在Excel VBA中,用CommandBars集合对象表示所有的命令栏集合。在Excel 2003中创建的自定义菜单栏,在Excel 2007中也可打开使用,只是这些菜单都添加到“加载项”选项卡中。

案例170 创建自定义菜单

1.功能说明

菜单栏和工具栏是用户与Excel进行交互的工具,在Excel中,将菜单栏、工具栏和快捷菜单合并为一种功能,称为命令栏,都放置到CommandBars集合中。在Excel中,可以使用VBA代码控制菜单(如增加自定义菜单)。

2.语法说明

在Excel VBA中,CommandBarControl对象表示具体的命令按钮或菜单项,该对象是CommandBarControls集合中的成员。每个CommandBar对象包含一个CommandBarControls集合对象。由CommandBar对象(如主菜单、“常用”工具栏和“格式”工具栏等命令栏)组成CommandBars集合对象。CommandBarControl对象常用属性和方法如下: z Caption属性,返回或设置指定命令栏控件的题注文字。

z OnAction属性,返回或设置一个VBA宏(子过程)名,该宏在用户单击或更改某命

令栏控件的值时运行。

CommandBarControls集合对象由CommandBarControl对象组成,通过Add方法可新建一个CommandBarControl对象,并将其添加到指定命令栏上的控件集合中。其语法格式如下:

expression.Add(Type, Id, Parameter, Before, Temporary)

各参数含义的如下:

z Type设置添加到指定命令栏的控件类型。可以为下列MsoControlType常量之一:

msoControlButton、msoControlEdit、msoControlDropdown、msoControlComboBox或msoControlPopup。

369

Excel VBA语法词典

z Id用来指定内置控件的整数。如果该参数为1,或者忽略该参数,将在命令栏中添加

一个空的指定类型的自定义控件。

z Parameter设置参数信息,对于内置控件,该参数用于容器应用程序运行命令。对于自

定义控件,可以使用该参数向VBA过程传递信息,或用其存储控件信息。

z Before设置位置信息,表示新控件在命令栏上位置的数字,新控件将插入到该位置控

件之前。如果忽略该参数,控件将添加到指定命令栏的末端。

z Temporary为True将使新命令栏为临时命令栏。临时命令栏在关闭容器应用程序时删

除,其默认值为False。

CommandBars集合对象由CommandBar对象组成,使用CommandBars对象的Add方法可新建一个命令栏并添加到命令栏集合。其语法格式为:

expression.Add(Name, Position, MenuBar, Temporary)

z z z z

各参数的含义如下:

Name为新命令栏的名称。如果忽略该参数,则为默认名称(例如Custom 1)。 Position设置新命令栏的位置或类型。

MenuBar为True将以新命令栏替换活动菜单栏。默认值为False。

Temporary为True将使新命令栏为临时命令栏。临时命令栏在关闭容器应用程序时删除。默认值为False。

3.案例说明

本例的主要功能是,创建自行创建的菜单命令。在默认情况下,Excel 2007的加载项选项中不包含任何特殊的命令。

4.编写代码

(1)添加菜单选项的代码如下:

Sub CreatMyMenu() Dim myMenubar As CommandBar Dim myMenu As Object Dim myMenuitem As Object Set myMenubar = CommandBars.ActiveMenuBar

Set myMenu = myMenubar.Controls.Add(msoControlPopup, , , , True)

myMenu.Caption = \"我的菜单选项\" Set myMenuitem = myMenu.Controls.Add(Type:=msoControlButton, ID:=1) myMenuitem.Caption = \"选项1\" myMenuitem.Style = msoButtonCaption myMenuitem.OnAction = \"Memo1\"

Set myMenuitem = myMenu.Controls.Add(Type:=msoControlButton, ID:=2) myMenuitem.Caption = \"选项2\" myMenuitem.Style = msoButtonCaption myMenuitem.OnAction = \"Memo2\" 370

第9章 自定义Excel 2007界面

Set myMenuitem = myMenu.Controls.Add(Type:=msoControlButton, ID:=3) myMenuitem.Caption = \"选项3\" myMenuitem.Style = msoButtonCaption myMenuitem.OnAction = \"Memo3\" End Sub

(2)为每个菜单项编写子过程,本例只显示一个提示信息对话框,不编写具体操作的代码。在实际应用中,应在这些子过程中编写完成具体功能的代码。

Sub Memo1()

MsgBox \"用户选择了选项1\我的菜单选项\" End Sub

Sub Memo2()

MsgBox \"用户选择了选项2\我的菜单选项\" End Sub

Sub Memo3()

MsgBox \"用户选择了选项3\我的菜单选项\" End Sub

5.运行结果

打开工作薄,默认的菜单选项如图9.1所示。当用户运行程序代码后,Excel自动在加载项中添加“我的菜单选项”命令菜单,并添加对应的菜单命令,如图9.2所示。

图9.1 默认的菜单选项 图9.2 添加的菜单选项

当用户选择相应的菜单选项后,系统触发菜单事件,显示提示信息,如图9.3所示。

图9.3 显示提示信息

371

Excel VBA语法词典

6.程序分析

在上面的代码中,首先获取当前活动菜单栏,接着在活动菜单栏中添加一个下拉菜单,最后为下拉菜单添加菜单项,并设置各菜单项的名称、调用的子过程等参数。

案例171 删除自定义菜单

1.功能说明

在Excel中,用户可以通过VBA代码删除自行添加的自定义菜单。

2.语法说明

在Excel VBA中,用户可以通过CommandBars.ActiveMenuBar属性获取一个 CommandBar 对象,该对象代表容器应用程序中的活动菜单栏。然后在活动菜单栏中确定要删除的菜单选项。

3.案例说明

本案例的主要功能是删除前面例子中的自定义菜单。

4.编写代码

删除自定义菜单的具体代码如下:

Sub DeleteMyMenu()

Dim myMenubar As Object, myMenu As Object Set myMenubar = CommandBars.ActiveMenuBar For Each myMenu In myMenubar.Controls If myMenu.Caption = \"我的菜单选项\" Then myMenu.Delete End If Next End Sub

5.运行结果

本例延续前面小节例子进行。在默认情况下,工作表中包含用户创建的菜单“New Items”,如图9.4所示。当用户运行程序后,删除的自定义菜单如图9.5所示。

372

第9章 自定义Excel 2007界面

图9.4 默认添加的菜单选项 图9.5 删除菜单选项后的工作表

6.程序分析

在上面的代码中,首先获取当前活动菜单的引用myMenubar,接着使用For Each … Next循环,逐个比较myMenubar菜单栏中的菜单(包含在Controls集合中),找到Caption属性为“New Items”的菜单,则使用Delete方法将其删除。

案例172 创建快捷菜单

1.功能说明

在Excel中,用户可以根据需要创建个性化的快捷菜单选项。

2.语法说明

Excel的快捷菜单有很多,在不同的对象上单击鼠标右键将弹出不同的快捷菜单项目。若要向这些快捷菜单中添加菜单项,首先需获取对应菜单的引用,再使用以下代码添加菜单项。

Application.CommandBars(\"Cell\").Controls.Add

3.案例说明

本案例的主要功能在操作工作表的时候,创建自定义的快捷菜单。

4.编写代码

(1)本例中添加单元格快捷菜单的代码如下:

Sub AddItemcontrol()

Dim cbcs As CommandBarControls, cbc As CommandBarControl Set cbcs = Application.CommandBars(\"Cell\").Controls Set cbc = cbcs.Add(Type:=msoControlButton, before:=1, temporary:=True) With cbc

.Caption = \"自定义的菜单选项\" .Tag = \"MyCellMenu\" End With

373

Excel VBA语法词典

End Sub

以上代码首先获取单元格的快捷菜单,接着使用Add方法向单元格快捷菜单中添加自定义菜单项。行标签和列标签快捷菜单的代码与此类似。

(2)关闭工作簿之前,删除上步新增的菜单项,具体代码如下:

Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim cbc As CommandBarControl For Each cbc In Application.CommandBars(\"Cell\").Controls If cbc.Tag = \"MyCellMenu\" Then cbc.Delete Next

End Sub

5.运行结果

本例的主要功能是为单元格对象添加快捷菜单,添加的结果如图9.6所示。

图9.6 添加的快捷菜单

6.程序分析

在实际开发中,用户可以为多种对象添加快捷菜单。例如,用户可以为选择工作表的列标签事件添加快捷菜单,也可以为工作表的行标签事件添加快捷菜单。这里就不详细展开介绍了。

374

第9章 自定义Excel 2007界面

9.2 自定义Excel 2007的功能区

功能区(RibbonX)是Office 2007新引进的用户界面,用户对其也可以进行自行定制。但是,自定义RibbonX不是通过VBA代码,而是XML语言实现的。本小节中,将详细讲解如何使用XML定义功能区。

案例173 自定义Office按钮

1.功能说明

用户可以通过编写XML代码来自定义Excel 2007中的Office按钮中包含的选项。

2.语法说明

在本例中的Office菜单按钮,多了个自定义菜单项,该菜单项中包含了三个控件,分别是按钮、切换按钮和复选框。共使用到了四种控件,分别是menu、button、toggleButton和checkBox。另外在使用这些控件时,还涉及到了多个属性的使用,如label、supertip、imageMso和itemSize。其中关键控件的内容如下:

z menu控件:可以包含按钮、复选框、菜单和切换按钮等多种控件元素作为其子元素。

其可以指定的属性分为两种,其一是通用属性,其二是特有属性。通用属性十分众多,例如label属性可以指定标签、supertip可以指定提示文字。menu还具有一个其特有的属性即itemSize,该属性可以设置normal和large两种值。默认情况下为normal,此时其图标为小图标。当设置large时,将使用大图标显示其图标。

z button控件:该控件不包含任何子元素,大部分的可设置属性都为通用属性。示例中

指定该控件的三个属性,label、supertip和imageMso属性。imageMso属性通过字符串的形式指定内置控件的图像名称。设置该属性后,按钮的图标将使用该指定图标。 z toggleButton和checkBox控件:这两个控件具有一定的相似性。不同的是toggleButton

控件可以由用户指定其显示的图标,而checkBox控件无法指定。当用户选择了这两种控件后,其图标将会切换到选中状态。toggleButton按钮控件和button、checkBox两控件都具有相似性,是两种控件的功能结合。

4.编写代码

有关使用XML文件自定义Excel 2007工作簿的具体步骤可参见上例,下面列出自定义菜单选项的的XML代码。

5.运行结果

本例的主要功能是自定义Office的菜单按钮。在Excel 2007中,为用户提供了新的Office按钮。用户通过可以通过XML来自定义Office菜单按钮,如图9.7所示。同时,还可以为自定义的菜单按钮添加被选中的效果,如图9.8所示。

图9.7 自定义Office按钮 图9.8 设置菜单的选中状态

同时,用户还可以为菜单设定提示信息,这里就不详细说明。

6.程序分析

同样地,用户可以通过IE查看上面的XML代码,如图9.9所示。

376

第9章 自定义Excel 2007界面

图9.9 查看XML代码

案例174 自定义快速访问栏

1.功能说明

在Excel中,用户可以根据自己操作习惯来定义快速访问栏。将自己最常用的操作按钮添加到快速访问栏中。

2.语法说明

对于大多数的用户而言,复制与粘贴操作是日常处理中最常用的功能。用户可以使用快捷键完成复制与粘贴操作。但是在进行特殊的复制与粘贴时,用户必须到开始选项卡的剪贴板组中找寻相应的命令。例如复制为图片、粘贴公式、粘贴值、转置粘贴以及粘贴图片等。本示例将把这些功能按钮通过XML代码将其显示在快捷访问工具栏。

4.编写代码

有关使用XML文件自定义Excel 2007工作簿的具体步骤可参见上例,下面列出自定义快速访问工具栏有关的的XML代码。