VBA开发Office 2007 Ribbon的方法

以下内容摘自《中文版Excel 2007 高级 VBA 编程宝典》

 

Chapter 22

使用功能区

概述

    Office 2007中最明显的变化可能是基于功能区的新用户界面了。本章提供了功能区的一个概述,并介绍了如何与VBA相关联。

从用户角度看新的Excel 2007 功能区用户界面 如何让VBA与功能区一起使用 用RibbonX代码定制Ribbon的入门介绍 修改功能区的工作簿示例 创建一个老式工具栏的样板化代码

    功能区是用户界面设计中的一个全新的概念。可以使用XML修改功能区,但是有一些功能区相关的操作可以用VBA执行。

22.1 功能区基础

    对于Excel 2007,您注意到的第一件事可能是它的新外观。沿用多年的菜单/工具栏式的用户界面已被抛弃,取而代之的是选项卡/功能区式的新界面。虽然新界面与过时的菜单/工具栏式的界面有些类似,但是您会发现它们有本质的不同。

    使用过Excel多年的用户可能会注意到,Excel的菜单系统随着新版本的出现越来越复杂。此外,工具栏的数量也激增。毕竟,每个新功能都必须是可访问的。过去,这些访问意味着要添加更多的项到菜单中,并创建新的工具栏。因此,Microsoft的设计人员着手解决这个过度拥挤的问题,这个新的功能区界面就是解决方案。

用户是否接受新的功能区界面,时间会告诉我们答案。正如笔者在本书中所述,对人们的反应的最好描述是“混合的”。当新事物出现时,总是有些人喜欢,有些人讨厌。

    在笔者看来,许多有经验的Excel用户会感到轻微的困惑,因为所有他们熟悉的命令顺序都已不复存在。另一方面,新用户则可以快速掌握,因为他们不会被不相关的菜单和工具栏所牵制。

    由于功能区UI是新增的,因此,在接下来的部分介绍了其他一些面向用户的信息。

功能区选项卡

功能区中有各种各样的可用命令,取决于选择哪一个选项卡。功能区将相关的命令按组划分。下面是Excel的选项卡概览:

开始:您可能会把大部分时间花在“开始”选项卡上。该选项卡包括基本的剪贴板命令、格式化命令、样式命令、插入和删除行列的命令,以及工作表编辑命令的分类。 插入:在工作表中插入某对象时,选择该选项卡。例如,插入表格、图示、图表、符号等。 页面布局:该选项卡包含影响工作表整体外观的命令,包括处理打印的设置。 公式:使用该选项卡来插入公式、命名范围、访问公式审核工具或者控制Excel执行计算的方式。 数据:Excel中与数据相关的命令包含在该选项卡上。 审阅:该选项卡包含检查拼写、翻译单词、添加批注和保护工作表的工具。 视图:视图选项卡包含控制如何查看工作表的命令。其中一些命令也可以从状态栏上获取。 开发工具:该选项卡默认是不可见的。它包含对开发人员有用的命令。要显示“开发工具”选项卡,选择“Office”-->“Excel选项”,然后选择“常用”。勾选“在功能区显示开发工具选项卡”复选框。 加载项:该选项仅在加载工作簿或定制菜单或工具栏的加载项时才可见(通过使用CommandBar对象)。由于菜单和工具栏在Excel 2007中不可再用,因此这些定制将显示在“加载项”选项卡中。

 

Excel 2007 中的CommandBar 对象

Excel 97 中引用了一种处理工具栏和菜单的全新方式。这些用户界面元素是CommandBar对象。通常称为工具栏的实际上是三种命令栏之一:


工具栏:带有一个或多个可单击的控件。



菜单栏:两个内置菜单栏是工作表菜单栏和图表菜单栏。



快捷菜单:当用户或击某个对象时弹出的菜单。


基于兼容性的考虑,Excel 2007 仍支持CommandBar对象——但其功能已显著减少。终端用户不再可以创建自定义工具栏。然而,VBA编程人员仍然可以创建和使用CommandBar对象(参见第22.4节“创建老式工具栏”)。问题是,Excel 2007忽略了许多CommandBar对象的属性和方法。例如,每个工具栏或定制的菜单都出现在功能区的“加载项”选项卡中。控制工具栏大小和位置的属性不再有用。此外,不再有浮动的工具栏。

下面的图显示了Excel 2003 中定制的菜单和工具栏,以及Excel 2007中同样的菜单和工具栏。虽然这些用户界面元素在Excel2007中仍然是可用的,但是很显然已经不是开发人员脑海中曾经的印象了。

毫无疑问,许多VBA开发人员都想要为他们的应用程序重新做用户界面。

本章介绍了使用CommandBar对象来创建自定义工具栏的一个简单示例(参见22.4节)。如果想要了解关于使用CommandBar对象创建自定义菜单和工具栏的详细信息,可以参考本书以前的版本。

Excel 2007中仍然支持定制快捷菜单,第23章将会涉及该主题。

功能区中的命令的外观随Excel窗口宽度变化而变化。如果该窗口太窄,不能显示全部内容时,命令就会做调整,看上去像缺少的一样,但仍可用。图22-1显示了功能区的“开始”选项卡。在最上面的图中,所有控件都是可见的。在中间的图中,Excel的窗口窄了些。注意,有些描述性的文本不见了,而有些图标变小了。最下面的图显示了极端情况,窗口变得非常窄。有些组只显示一个图标。不过,如果单击该图标,则所有组命令都可用。

提示:

如果想隐藏功能区以增大工作表视图,双击任一选项卡。功能区消失(但选项卡仍存在),就可以看到工作表附加的5行。如果需再次使用功能区,可单击选项卡,它会暂时性地再次出现。为了永久恢复功能区,双击选项卡。也可按Ctrl+F1快捷键切换功能区的显示。

22.2 VBA和功能区

现在有一个大问题:VBA编程人员可以对功能区做些什么?答案很简单:并不多。

下面是可以使用VBA对功能区执行的操作列表:

确定特定控件是否被激活。

确定特定控件是否可见。

确定特定控件是否可以按下(对于切换按钮和复选框)。

获取控件的标签、屏幕提示或超级提示(对控件的更详细的描述)

显示与某个控件相关联的图像。

执行特定控件。

下面是想要对功能区进行却不可能实现的操作列表:

确定哪一个选项卡是当前选定的。

激活某个特定的选项卡。

添加新的选项卡。

添加一个新的组到选项卡。

添加新控件。

删除控件。

禁用控件。

22.2.1 访问功能区控件

Excel包含的功能区控件超过1700个。每个功能区控件都有一个名称,使用VBA操作控件时或以使用该名称。

使用,下列语句显示一个消息框,其中显示了ViewCustomViews控件的Enabled状态(该控件位于“视图”-->“工作簿视图”组)。

MsgBox Application.CommandBars.GetEnabledMso("ViewCustomView")

遗憾的是,不可能通过编写VBA代码来循环遍历功能区上的所有控件并显示控件名称列表。

22.2.2 使用功能区

在前面的章节中,介绍了一个使用CommandBars对象的GetEnabledMso方法的示例。下面是CommandBars对象中所有与使用功能区相关的方法的列表。所有这些方法都包含参数idMso,该参数表示的是命令的名称。

ExecuteMso:执行控件。

GetEnabledMso:如果指定控件被激活,则返回True.

GetImageMso:返回控件的图像

GetLabelMso:返回控件的标签

GetPressedMso:如果指定控件被按下,则返回True(应用于复选框和切换按钮控件)

GetScreentipMso:返回控件的屏幕提示(显示在控件中的文本)

GetSupertipMso:返回控件的超级提示(当鼠标指针移动到控件上时显现的对控件的描述)

其中一些方法是没有什么用的。为何VBA编程人员需要确定控件的屏幕提示呢?想不出原因。

下列VBA语句切换“选择和可见性”窗格(一个新功能,帮助选择工作表上的对象):

Application.CommandBars.ExecuteMso("SelectionPane")

下列语句显示了“选择性粘贴”对话框:

Application.CommandBars.ExecuteMso("PasteSpecialDialog")

下面的命令告诉我们公式编辑栏是否可见(对应于“视图”-->“显示/隐藏”组中的“编辑栏”控件的状态):

MsgBox Application.CommandBars.GetPressedMso("ViewFormulaBar")

注意:代码并不能通过访问功能区控件来改变公式编辑栏的可视性。然而,可以使用Application对象的DisplayFormulaBar属性:

Application.DisplayFormulaBar = True

下列语句在“合并后居中”控件被激活时显示True(该控件在工作表被保护或活动单元格位于表格内时被禁止执行)。

MsgBox Application.CommandBars.GetEnabledMso("MergeCenter")

下列VBA代码将ActiveX图像控件添加到活动工作表中,并使用GetImageMso方法来显示“开始”-->“编辑"组中的“查找和选择”控件的图像:

Sub ImageOnSheet()

Dim MyImage As OLEObject

Set MyImage = ActiveSheet.OLEObjects.Add _

(ClassType := "Forms.Image.1", _

Left := 50, _

Top := 50)

With MyImage.Object

.AutoSize = True

.BorderStyle = 0

.Picture = Application.CommandBars. _

GetImageMso("FindDialog", 32, 32)

End With

End Sub

 

22.2.3 激活选项卡

Microsoft并没有提供一种直接的方法来从VBA中激活功能区选项卡。但是,如果真的想这么做,使用SendKeys是唯一的选择。SendKeys方法模拟按键。激活“开始”选项卡所需的按键是Alt键,然后按H键。这些按键会显示功能区中的按键提示。如果要隐藏按键提示,只需按F6键。有了这些信息,下列语句就会发送所需按键来激活“开始”选项卡:

Application.SendKeys "%h{F6}"

 

插入:"%n{F6}"

页面布局:"%p{F6}"

公式:"%m{F6}"

数据:"%a{F6}"

审阅:"%r{F6}"

视图:"%w{F6}"

开发工具:"%l{F6}"

加载项:"%x{F6}"

 

关于快速访问工具栏:

在Excelr 的老版本中,终端用户要修改用户界面相对要简单一些。用户可以创建包含频繁使用的命令的自定义工具栏,甚至可以删除从不使用的菜单项。用户还可以显示任意数量的工具栏,随心所欲地移动工具栏。现在这些都不复存在了。

快速访问工具栏(QAT)是Excel 2007中唯一一个可以由用户自定义的用户界面元素。用户添加一个命令到QAT中十分简单,因此不论激活哪一个功能区选项卡,命令都是可用的。QAT不能移动,但是Microsoft允许用户决定是否显示QAT:显示在功能区的上面或下面。

QAT并不是对象模型的一部分,因此不能使用VBA对QAT进行操作。

QAT信息被存储在名为Excel.qat的XML文件中。文件路径如下:

c:/Documents and Settings//Local Settings/Application Data/Microsoft/Office

可以用文本编辑器或XML浏览器来浏览该文件。如果复制了该文件,并用XML扩展名重命名,那么甚至可以用Excel打开(提示如何打开文件、指定为XML表格时)。但是,不能使用Excel修改Excel.qat文件。

22。3 定制功能区

使用VBA不能执行任何功能区修改。因此,需要编写RibbonX代码,将其插入到工作簿文件中——这些都在Excel外部完成。可以创建VBA回调过程。回调过程是一个VBA宏,该宏在自定义的功能区控件被激活时执行。

RibbonX代码是一个XML标记,它描述了控件、控件在功能区中显示的位置、控件的外观以及控件激活时发生的事件。本书并没有详细介绍RibbonX——它太过复杂,甚至可以用整本书进行描述。但是,本书介绍了一些样本示例,以便您可以更好地理解修改Excel 2007用户界面所涉及的知识,以及确定这些是否是您想要学习的东西。

22。3。1 RibbonX的一个简单示例

本小节详细描述了各个步骤细节,以便您对修改Excel的功能区有一个整体感觉。该示例在“数据”选项卡上创建了一个新的功能区组(名为Custom)。它还在新的功能区组中创建了两个按钮,分别标记为Hello World 和 Goodbye World。单击任何一个按钮都会执行一个VBA宏。

查看错误

在开始使用功能区定制之前,必须激活RibbonX错误的显示。访问“Office“-->“Excel选项卡“对话框,单击“高级”选项卡。向下浍到“常规”部分,选中“显示加载项用户接口错误”复选框。

激活该设置后,打开工作簿时就会显示RibbonX错误(如果有的话)——这有助于调试。

下面是创建一个包含修改功能区的RibbonX代码的工作簿的步骤:

(1)创建一个新的Excel工作簿,插入一个VBA模块,输入两个回调过程。这些过程在单击按钮时被执行:

Sub HelloWorld(Control As IRibbonControl)

MsgBox "Hello World!"

End Sub

 

Sub GoodbyeWorld(Control As IRibbonControl)

ThisWorkbook.Close

End Sub

(2)保存工作簿,将欺命名为ribbon modification.xlsm。

(3)关闭工作簿。

(4)激活包含ribbon modification.xlsm文件的文件夹,创建一个名为customUI的文件夹。

(5)在该文件夹内,使用文本编辑器(如Windows记事本)来创建一个名为customUI.xml的文本文件,里面包含下列Ribbon XML代码:

你可能感兴趣的:(VBA)