VBA开发Office2007Ribbon的⽅法
以下内容摘⾃《中⽂版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窗⼝宽度变化⽽变化。如果该窗⼝太窄,不能显⽰全部内容时,命令就会做调整,看上去像缺少的⼀样,但仍可⽤。图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/<username>/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模块,输⼊两个回调过程。这些过程在单击按钮时被执⾏:
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记事本)来创建⼀个名为l的⽂本⽂件,⾥⾯包含下列Ribbon XML 代码:
<customUI xmlns="schemas.microsoft/office/2006/01/customui">
<ribbon>