我们不能单独使用 VBA 来修改功能区,必须编写 RibbonX 代码并将代码插入到 Office 文件中。你可以创建一个 VBA 宏,当一个自定义的功能区控件被激活时执行。
RibbonX 代码是可扩展标记语言 (XML),它用于描述控件,包括它们在功能区上的显示位置、外观以及激活它们时发生的情况。
Office RibbonX 编辑器简介
我们可以使用 Office RibbonX 编辑器为加载项、标准工作簿或启用宏的工作簿等创建自定义 UI。
Office RibbonX Editor 编辑器是开源的免费工具,用于编辑 Office 开放文档的定制 UI,本工具支持 Office 2007 和 Office 2010 两种架构。
Office 2010 定制 UI 架构是最新版本,后续发布的 Office 2013、Office 2016、Office 2019 和 Microsoft 365 仍然使用相同架构。
创建自定义功能区
在此示例中,我们将在 Excel 新工作簿中创建自定义功能区,并添加一些 Excel 内置控件和三个自定义按钮,并编写简单的宏代码,让这三个按钮工作起来。
创建启用宏的工作簿
- 创建一个新的 Excel 工作簿,在 VBE 中插入一个标准模块。
- 将工作簿另存为启用宏的工作簿。
- 关闭工作簿。
如果要为现有加载宏创建自定义功能区,如果加载宏已加载,您需要将其卸载。
使用 Office RibbonX 编辑器定制 UI
- 下载 Office RibbonX Editor 并运行(非安装版主程序名为:
OfficeRibbonXEditor.exe
)。 - 单击 Office RibbonX 编辑器工具栏上的【Open】按钮找到并打开刚才创建的启用宏的工作簿。
- 从【Insert】菜单,选择【Office 2010+ Custom UI Part】。这将在左侧树视图中的工作簿下添加一个
customUI14.xml
条目。
插入 Office 2010+ Custom UI Part 提示如果你使用 Office 2010 及以上版本推荐选择 Office 2010+ Custom UI Part,否则选择 Office 2007 Custom UI Part。当然如果希望在所有 Office 版本中都得到兼容,选择 Office 2007 Custom UI Part。
选择 Office 2007 Custom UI Part 会添加
customUI.xml
条目。 - 从【Insert】菜单, 选择【Sample XML】再选择【Excel - A Custom Tab】。
插入 Excel 自定义选项卡示例 这一步会输入一个标准的 RibbonX 代码,经过美化的代码如下:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon> <tabs> <tab id="customTab" label="Contoso" insertAfterMso="TabHome"> <group idMso="GroupClipboard"/> <group idMso="GroupFont"/> <group id="customGroup" label="Contoso Tools"> <button id="customButton1" label="ConBold" size="large" onAction="conBoldSub" imageMso="Bold"/> <button id="customButton2" label="ConItalic" size="large" onAction="conItalicSub" imageMso="Italic"/> <button id="customButton3" label="ConUnderline" size="large" onAction="conUnderlineSub" imageMso="Underline"/> </group> <group idMso="GroupEnterDataAlignment"/> <group idMso="GroupEnterDataNumber"/> <group idMso="GroupQuickFormatting"/> </tab> </tabs> </ribbon> </customUI>
- 点击工具栏上的【Validate】按钮验证代码以确保没有拼写错误。每当我们修改了代码都要进行验证这一步。符合语法规则的 XML 文档称为“Well Formed”XML 文档。
XML 文档语法验证通过 - 点击工具栏上的【Generate Callbacks】按钮。这一步根据 RibbonX 代码中的 onAction 属性生成相应的回调,用于在 VBA 中写入相应的代码来控制控件该做什么。
Office RibbonX 编辑器生成回调 - 将上面代码复制到剪贴板,以便稍后将它们粘贴到 Excel 工作簿的模块中。
'Callback for customButton1 onAction Sub conBoldSub(control As IRibbonControl) End Sub 'Callback for customButton2 onAction Sub conItalicSub(control As IRibbonControl) End Sub 'Callback for customButton3 onAction Sub conUnderlineSub(control As IRibbonControl) End Sub
- 点击工具栏上的【Save】按钮保存。
在 Excel VBE 编辑器中编写控制代码
- 在 Excel 中重新打开刚才的工作簿,您会注意到一个新的【Contoso】选项卡添加在【开始】选项卡之后。
新加的 Contoso 选项卡 - 这时如果点击【ConBold】按钮,Excel 会显示错误,无法运行宏,因为我们还没有为这些按钮绑定宏。
- 按 Alt+F11 打开 VBE,并将您刚才复制的回调过程粘贴到模块中。如果此时你再次点击【ConBold】按钮,虽然不会再有错误提示了,但是没任何反应,因此我们还要为每个过程写相应的控制代码。
- 接下来我们为每个过程写一个简单的 VBA 代码。比如添加:
MsgBox "Hello World!"
。Excel 内置控件不用写代码。完整代码如下:Option Explicit 'Callback for customButton1 onAction Sub conBoldSub(control As IRibbonControl) MsgBox "Hello World!" End Sub 'Callback for customButton2 onAction Sub conItalicSub(control As IRibbonControl) MsgBox "Hello Excel!" End Sub 'Callback for customButton3 onAction Sub conUnderlineSub(control As IRibbonControl) MsgBox "Hello 果果课程网!" End Sub
- 在 VBE 中选择【文件】【保存】来保存更改。
- 返回到 Excel,选择【Contoso】选项卡,单击【ConBold】按钮以测试它是否有效。
-
测试自定义功能区按钮