定制Ribbon

Cover
使用VBA不可以执行任何Ribbon修改,而是必须编写RibbonX代码并将代码插入到工作簿文件中——这些操作都是在Excel外部进行的。然而,可以创建VBA回调过程。一个回调过程是一个VBA宏,当激活自定义Ribbon控件时执行。
RibbonX代码是描述控件的XML标记,指定控件在Ribbon中出现的位置、外观、激活时的动作。这里不介绍RibbonX——足够复杂,可以用整本书来讲述该主题。但仍提供了一些简单的示例,以便于理解涉及到修改Excel 2007 UI的相关事项以及您决定是否愿意进一步学习。

一个简单的RibbonX示例
本示例在“数据”选项卡中创建一个新的Ribbon组(名为Custom),并在该组中创建了两个按钮,分别标为“Hello World”和“Goodbye World”。单击这些按钮中的任何一个执行相应的VBA宏。
- - - - - - - - - - - - - - - - - - - - - - - - -
注:显示错误
在处理任何的Ribbon定制之前,应该启用RibbonX错误显示。在“Excel选项”对话框中的“高级”选项卡下,选中“常规”里面的“显示加载项用户接口错误”前的复选框。
- - - - - - - - - - - - - - - - - - - - - - - - -
下面这些步骤创建包含修改Ribbon的RibbonX代码的工作簿:
1、创建一个新的Excel工作簿,插入一个VBA模块,并输入两个回调过程。在单击按钮时将会执行这些过程:
Sub HelloWorld(control As IRibbonControl)
        MsgBox “Hello World!”
End Sub

Sub GoodbyeWorld(control As IRibbonControl)
        ThisWorkbook.Close
End Sub
3、保存该工作簿并将其命名为RibbonModification.xlsm。
4、关闭该工作簿。
5、在包含RibbonModification.xlsm的文件夹中,创建一个名为customUI的文件夹。
6、在该文件夹中,使用文本编辑器创建一个名为customUI.xml的文本文件,其代码如下:

<customUI xmlns=”http://schemas.microsoft.com/office/2006/01/customui“>
    <ribbon>
    <tabs>
    <tab idMso=”TabData”>
      <group id=”Group1″ label=”Custom”>
        <button id=”Button1″
            label=”Hello World”
            size=”normal”
            onAction=”HelloWorld”
            imageMso=”HappyFace” />
        <button id=”Button2″
            label=”Goodbye World”
            size=”normal”
            onAction=”GoodbyeWorld”
            imageMso=”DeclineInvitation” />
        </group>
    </tab>
    </tabs>
   </ribbon>
</customUI>

7、在Windows资源管理器中,在RibbonModification.xlsm文件后添加.zip扩展名。现在该文件名应该是RibbonModification.xlsm.zip。
8、拖动在第5步中所创建的customUI文件夹到RibbonModification.xlsm.zip文件中。(Windows将ZIP文件当作文件夹,因此可以进行拖放操作)
9、双击RibbonModification.xlsm.zip文件,打开该文件。下图1显示了ZIP文件的内容。
当启用该项设置后,在工作簿打开时会显示RibbonX错误——这对于调试是非常有帮助的。
ZipFile
图1:Excel工作簿作为ZIP文件所显示的内容
10、双击该ZIP文件里的_rels文件夹,该文件夹包含一个名为.rels的文件。
11、拖动.rels文件到ZIP文件以外的某个位置(例如,桌面)。
12、使用文本编辑器打开这个.rels文件(这是个XML文件)。
13、在.rels文件的标记前,添加下面的行:

<Relationship    Type=”http://schemas.microsoft.com/office/2006/relationships/ui/    extensibility” Target=”/customUI/customUI.xml” Id=”12345″ />

14、保存这个.rels文件并将其拖回.ZIP文件,覆盖掉原来的同名文件。
15、移除.zip扩展名,即将该文件现在为RibbonModification.xlsm。
打开该工作簿,如果一切正常的话,您应该看到在“数据”选项卡中增加了一个带有两个按钮的新组,如图2所示。
NewGroup
图2:RibbonX代码创建了带有两个按钮的一个新组(红色框所示)
由指定的文档来对Ribbon进行修改,理解这一点很重要。换句话说,新的Ribbon组仅当包含RibbonX代码的工作簿为活动工作簿时才显示。这是与以前版本的Excel中对其UI进行修改的一个主要的不同。
技巧:要在任何工作簿中都显示Ribbon定制,则可将该工作簿转换为加载项文件,或者将RibbonX代码添加到个人宏工作簿中。
有一些工具可以帮助我们来定制Ribbon,其中一个是:Office 2007 Custom UI Editor。该程序仍需手工创建RibbonX代码,但它可以验证代码。同时,也消除了所有乏味的手工文件操作。并且,它可以产生VBA回调过程声明,您可以将之复制并粘贴到VBA模块中。
(但是,该程序不支持中文,因此,若想在Ribbon中显示中文,则还是要使用上述步骤)
Office 2007 Custom UI Editor
图3:Office 2007 Custom UI Editor

Office 2007 Custom UI Editor下载地址:
Office 2007 Custom UI Editor

上面示例的进一步说明
下面对上一节中的示例RibbonModification.xlsm工作簿提供进一步的说明。
1、VBA回调过程
上一节的示例工作簿中,包含两个VBA过程:HelloWorld和GoodbyeWorld,与RibbonX代码里的OnAction参数的名称一致。OnAction参数是链接RibbonX代码与VBA代码的一种方式。
这两个VBA过程都包含一个名为control的参数,control是一个IRibbonControl对象,有三个属性,均可以在VBA代码中访问:

  • Context:包含触发回调的Ribbon的活动窗口的句柄。例如,使用下面的表达式来获取包含RibbonX代码的工作簿的名称:
    control.Context.Caption
  • Id:包含控件的名称,由其ID参数指定。
  • Tag:包含与该control相联系的任何任意的文本。

2、.RELS文件
插入包含RibbonX代码的文件不会有任何效果,除非指定文档文件和定制文件之间的相互关系。这些关系由XML编写,存储在_rels文件夹中的.rels文件里。下面是上一节中的例子所添加的关系:

<Relationship Type=”http://schemas.microsoft.com/office/2006/
  relationships/ui/extensibility” Target=”/customUI/customUI.xml”
  Id=”12345″ />

参数Target指向包含RibbonX代码的customUI.xml文件。参数Id包含一个任意的文本字符串,该字符串可以包含任何内容,只要其是唯一的(也就是说,只要没有其它的标记使用相同的Id)。
3、RibbonX代码
正如前面已提到的,编写XML代码来定义UI修改不是一项简单的任务。这里,将提供一些简单的示例,但您还将需要学习更多其它的资源。
- - - - - - - - - - - - - - - - - - - -
使用imageMso图像
Microsoft Office 2007提供了大约2500个命名的图像,它们与不同的命令相关联。如果知道图像的名称,则可以为自定义的Ribbon控件指定这些图像。
下面的图片中显示的工作簿包含所有imageMso图像的名称。向下滚动这些图像名称,您一次将可以看到50个图像(小或大尺寸),工作簿中显示的图像开始于活动单元格中的图像名称。该工作簿名为mso image browser.xlsm,可在下面的地址中下载:mso image browser.rar
imageMso
图4
也可以在放置于用户窗体的Image控件中使用这些图像。下面的语句赋予名为ReviewAcceptChange的imageMso图像到名为Image1的用户窗体Image控件的Picture属性中,图像的尺寸被指定为32×32像素。
Image1.Picture = Application.CommandBars. _
GetImageMso(”ReviewAcceptChange”, 32, 32)
- - - - - - - - - - - - - - - - - - - -
<未完待续>


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

发表评论