首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Excel实战技巧60: 自定义功能区

Excel实战技巧60: 自定义功能区

作者头像
fanjy
发布于 2019-11-11 15:36:25
发布于 2019-11-11 15:36:25
2.1K04
代码可运行
举报
文章被收录于专栏:完美Excel完美Excel
运行总次数:4
代码可运行

自Office 2007版本开始,Microsoft对Office界面进行了彻底的改造,将原来的菜单和工具栏改成了功能区,文件格式也进行了改变。现在的Office文件,实际上是一个压缩文件,其中包括了创建文档的XML文件。这样,我们能够通过修改其XML文件结构,从而创建自已的功能区。

将文件修改为压缩文件

首先,需要修改Excel文件的扩展名为.zip,例如将文件MyCustomRibbon.xlsm修改为MyCustomRibbon.zip或者MyCustomRibbon.xlsm.zip,此时,会弹出一个如下图1所示的警告信息框,单击“是”。

图1

双击打开这个压缩文件,可以看到如下图2所示的文件夹和文件,我们需要在其中添加一些文件夹和文件,以及修改一些文件来自定义功能区。

图2

创建自定义功能区

在压缩文件外,创建一个新文件夹,我们将其命名为customUI。在该文件夹中,创建一个新的名为my_customUI.xml的文件。我们将在这个文件中创建XML,控制自定义功能区的界面外观。

打开my_customUI.xml,在第一行输入:

(对于Excel 2007和Excel 2010)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">

或者:

(对于Excel 2013及以后版本)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">

当然,第一条语句也适用于Excel 2010以后的版本,但在功能上有许多局限性。

在这个标签中,xmlns代表XML名称空间,“URL”不是指向实际的在线资源,而是指向Office内部代码中列出的架构,为诸如<ribbon>和<button>之类的标记赋予了含义,它们是框架的一部分。而在2013和更高版本中提供了其他功能,这些功能在早期版本的Excel中是不可用的。

接下来,添加选项卡,并在选项卡中添加带有按钮的组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">    <ribbon>        <tabs>            <tab id="mytab"label="我的选项卡">                <group id="group1" label="第一组">            <button id="button1" label="按钮1" />            <button id="button2" label="按钮2" />         </group>          <group id="group2" label="第二组">            <button id="button3" label="按钮3" />            <button id="button4" label="按钮4" />                </group>            </tab>        </tabs>    </ribbon></customUI>

上面的XML代码为我们的自定义功能区搭建了一个基本的框架。注意,每个控件的id名必须唯一且没有空格。

保存并关闭my_customUI.xml,将文件夹customUI拖拉到上文创建的压缩文件夹中。

添加关联关系

将压缩文件中的_rels文件夹拖至压缩文件外,使用记事本打开该文件夹里面的.rels文件,在</Relationships>前添加:

(对于Excel 2007和Excel 2010)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Relationship Id="my123" Type=http://schemas.microsoft.com/office/2006/relationships/ui/extensibility Target="/customUI/my_customUI.xml"/>

或者:(对于Excel 2013及以后版本)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Relationship Id="my123" Type="http://schemas.microsoft.com/office/2007/relationships/ui/extensibility" Target="/customUI/my_customUI.xml"/>

其中,Target的值应该与自定义的xml文件的路径相匹配。

保存并关闭这个.rels文件,删除压缩文件中的_rels文件夹,将修改后的_rels文件夹拖回到压缩文件中。

将压缩文件的扩展名修改回Excel文件的扩展名,打开Excel文件,可以看到添加了一个新的名为“我的选项卡”的选项卡,有两个组,每组有两个按钮,如下图3所示。

图3

下面,为自定义功能区添加响应功能。

修改按钮

主要介绍如何为按钮添加图像并链接到宏。

再次修改Excel文件的扩展名为压缩文件,将my_customUI.xml文件拖出压缩文件并进行修改。

将:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button id="button1" label="按钮1" />

修改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button id="button1" label="按钮1" imageMso="HappyFace" size="large"/>

此时的自定义功能区效果如下图4所示。

图4

我们给按钮指定了内置的图像并设置其大小。

也可以给按钮添加自定义图像,此时应使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
image="imageID"

但需要添加关联关系并在Excel文件中包括图像。需要在customUI文件夹中创建两个新文件夹:

1.文件夹images:用于包含自定义图像。

2.文件夹_rels:用于关联。在此文件夹中添加一个文件,文件名为XML文件的名字(示例中是my_customUI.xml),后缀为.rels,因此其名字为:my_customUI.xml.rels。该文件告诉Excel怎样识别想要放置在功能区中的图像,其代码类似如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="images/my_pic_filename.png"  Id="my_icon_1" /><Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="images/my_2nd_pic_filename.png"  Id="my_icon_2"/></Relationships>

示例中,在images文件夹中,放置了名为my_pic_filename.png和my_2nd_pic_filename.png的图像文件,如果想在按钮中使用,则需要通过指定其ID来调用,例如my_icon_1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button id = "button4" label = "按钮4" image = "my_icon_1" onAction = "sayGoodbye"/>

下面,我们为按钮关联宏,以便用户单击按钮时响应相关功能。

将:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button id="button1" label="按钮1" imageMso="HappyFace" size="large"/>

修改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button id="button1" label="按钮1" imageMso="HappyFace" size="large" onAction="MyHello" />

使用更新后的文件替换掉压缩文件中的相应文件后,恢复Excel扩展名,打开Excel文件,开启VBE,在标准模块中输入代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub MyHello(control As IRibbonControl)    Dim yourName As String    yourName = InputBox("请输入你的名字:")    MsgBox yourName & ", 欢迎你!"End Sub

此时,当你按下按钮1时,会弹出一个输入框要求输入名字,在输入完成后,会给出一句问候信息。

小结

不借助任何特定工具创建自定义功能区的步骤:

1.创建一个名为customUI的文件夹并在其中添加一个名为my_customUI.xml的文件。

2.在my_customUI.xml文件中输入自定义功能区的XML代码。

3.修改Excel文件的扩展名为压缩文件。

4.将压缩文件中的_rels文件夹复制并粘贴到压缩文件外。

5.修改_rels文件夹中的.rels文件建立关联关系并保存。

6.删除压缩文件中的_rels文件夹。

7.将修改后的_rels文件夹和新建的文件夹customUI拖至压缩文件中。

8.将压缩文件扩展名恢复成Excel文件扩展名。

9.在VBE中编写相关控件的回调代码,注意过程名后带有相应的回调参数。

本文虽然以Excel为示例来讲解,但同样的原理也可以运用到Word和PowerPoint中。此外,你也可以借助于特殊的工具(例如CustomUIEditor)更方便来自定义功能区。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Excel实战技巧:创建带有自定义功能区的Excel加载宏
创建的这个带有自定义功能区的Excel加载宏将可以有任意工作簿中使用,下面我们详细讲解其创建过程。
fanjy
2022/11/16
4.2K0
Excel实战技巧:创建带有自定义功能区的Excel加载宏
自定义功能区示例:自定义文件菜单、上下文菜单、功能区选项卡
在《自定义功能区示例:创建用于工作表导航的下拉列表》、《自定义功能区示例:创建用于工作表导航的动态组合框》中,我们在Excel功能区中添加一个自定义的选项卡,然后再该选项卡中添加带有下拉列表或组合框的一个自定义组,可用于从下拉列表中选择工作表,从而快速导航到该工作表,这对于工作簿中有大量工作表且要快速找到相应的工作表的用户来说,非常有用。
fanjy
2023/11/23
5420
自定义功能区示例:自定义文件菜单、上下文菜单、功能区选项卡
VBA编写Ribbon Custom UI编辑器03——认识Ribbon的xml
当然我们关注的不是说主要用哪几个东西,而是Ribbon xml的编写格式,这个格式的文本如何转换为一个二维数组,然后输出到Excel表格:
xyj
2020/08/18
2.4K0
VBA专题10-24:使用VBA操控Excel界面之单元格上下文菜单(Excel 2010及以后的版本)
假设你需要对工作表中前面有货币符号的值执行计算,然而那些值被解释为文本,你要编写VBA过程来移除所选单元格区域中的货币符号。要使该过程更易访问,你想在单元格上下文菜单中放置其快捷方式。下面的XML代码和VBA代码完成上述任务。
fanjy
2021/03/26
1.8K0
VBA专题10-24:使用VBA操控Excel界面之单元格上下文菜单(Excel 2010及以后的版本)
在Excel中自定义上下文菜单(中)
在下面的示例中,将创建与上文描述的示例相同的按钮和子菜单,但使用RibbonX创建。
fanjy
2022/11/16
2.1K0
在Excel中自定义上下文菜单(中)
VBA专题10-9:使用VBA操控Excel界面之在功能区中添加自定义按钮控件
下面的一系列文章将重点讲解如何在功能区中添加不同类型的自定义控件,它们与最底层的自定义命令相关。这里的自定义命令是指程序员自已编写的VBA过程。
fanjy
2021/01/20
5.9K0
VBA专题10-9:使用VBA操控Excel界面之在功能区中添加自定义按钮控件
自定义功能区示例:创建用于工作表导航的下拉列表
我们可以自定义功能区,在上面设置我们想要的功能,从而方便我们对工作表或工作簿的操作。本文的示例如下图1所示,在功能区中添加一个自定义的选项卡,然后再该选项卡中添加带有下拉列表的一个自定义组,用于从下拉列表中选择工作表,从而快速导航到该工作表,这对于工作簿中有大量工作表且要快速找到相应的工作表的用户来说,非常有用。
fanjy
2023/10/31
7080
自定义功能区示例:创建用于工作表导航的下拉列表
VBA专题10-6:使用VBA操控Excel界面之执行命令以及激活功能区选项卡的两种方法
Application.CommandBars.ExecuteMso(idMso)
fanjy
2020/09/25
4.4K0
VBA专题10-6:使用VBA操控Excel界面之执行命令以及激活功能区选项卡的两种方法
VBA专题10-8:使用VBA操控Excel界面之在功能区中添加内置控件
4. 在CustomUI Editor中,单击“插入”并选择“Office 2007 Custom UI Part”。之所以选择这个选项,是使工作簿与Excel 2007及以后的版本兼容。
fanjy
2020/11/09
7.7K0
VBA专题10-8:使用VBA操控Excel界面之在功能区中添加内置控件
VBA编写Ribbon Custom UI编辑器06——读取xml
对Office文件读取和写入custom.xml,就是读取和写入ZIP文件,读取ZIP文件并解压缩可以查看前面文章VBA解压缩ZIP。
xyj
2020/08/20
1.4K0
VBA专题10-18:使用VBA操控Excel界面之在功能区中添加自定义菜单控件
这是本系列文章讲解的最后一种在功能区中添加的自定义控件类型,也是用于组织多个命令的一种非常有用的控件——菜单控件。
fanjy
2021/03/12
1.8K0
创建MyVBA加载宏
MyVBA加载宏主要功能是设置为自动加载,作为打开其他宏文件的一个程序,做好后大概是这么一个东西:
xyj
2020/07/28
1.2K0
创建MyVBA加载宏
VBA编写Ribbon Custom UI编辑器07——写入xml
这里需要注意的是,如果某个Office文件没有custom.xml,除了要写入custom.xml之外,还必须在_rels/.rels文件后面,增加一条Relationship:
xyj
2020/08/26
1.3K0
创建常用功能加载宏
创建一个空白加载宏文件,取名为常用功能,保存位置与MyVBA加载宏保持一致,这样MyVBA加载宏的打开宏文件菜单会找到它,并创建子按钮。
xyj
2020/07/28
5190
创建常用功能加载宏
自定义功能区示例:创建用于工作表导航的动态组合框
在《自定义功能区示例:创建用于工作表导航的下拉列表》中,我们在Excel功能区中添加一个自定义的选项卡,然后再该选项卡中添加带有下拉列表的一个自定义组,用于从下拉列表中选择工作表,从而快速导航到该工作表,这对于工作簿中有大量工作表且要快速找到相应的工作表的用户来说,非常有用。
fanjy
2023/11/02
6840
自定义功能区示例:创建用于工作表导航的动态组合框
VBA专题10-23:使用VBA操控Excel界面之添加动态菜单
在本系列后面的示例程序中,你将会看到如何使用项目和带图像的库控件通过getItemLabel和getItemImage回调属性引用的VBA过程在运行时动态地填充下拉控件。另一个允许动态填充其内容的控件是组合框控件。
fanjy
2021/03/26
6.9K0
VBA专题10-23:使用VBA操控Excel界面之添加动态菜单
VBA专题10-14:使用VBA操控Excel界面之在功能区中添加自定义库控件
在自定义功能区时,我们可以插入图像到自定义库中,图像文件的类型可以是ico、bmp、png、jpg和tif。
fanjy
2021/03/12
3.6K0
VBA专题10-15:使用VBA操控Excel界面之在功能区中添加自定义标签控件
3. 在CustomUI Editor中,单击“插入”并选择“Office 2007 Custom UI Part”。
fanjy
2021/03/12
2.7K0
VBA与数据库——写个类操作ADO_历史DB
但是如果是经常使用的数据库,还是希望能够一键就打开,这种时候就需要在菜单上显示出来。
xyj
2022/01/18
6361
Rust赋能前端:写一个 Excel 生成引擎
大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder
前端柒八九
2025/01/03
3620
Rust赋能前端:写一个 Excel 生成引擎
推荐阅读
相关推荐
Excel实战技巧:创建带有自定义功能区的Excel加载宏
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档