EXCEL自定义功能区Ribbon


UI编辑器、EXCEL图标及内置控件下载:密码:cgdyy4

功能区组成

EXCEL功能区由选项卡命令组命令组成,如下图所示:

功能区:ribbon
选项卡tabs:tab
命令组:group
命令组件

在这里插入图片描述
我们可以将一些常用的功能定制到功能区方便操作。


EXCEL2010文件格式

从Microsoft Office 2007开始,微软引入了一种基于XML的新文件格式:为Microsoft Office Open XML Formats,适用于07及以上版本的EXCEL/WORD/PPT。Office XML Formats格式的文件会自动压缩,最多可缩小75%,。一般使用zip压缩技术来存储文档。打开文件时,可以自动解压缩;保存文件时,可以重新自动压缩,这些解压和压缩的操作都是在后台进行的,对用户是透明的(用户感觉不到这些操作)。
一个Excel 2010文件就是一个压缩了的容器,其中包含着一些文件和文件夹。
我们可以通过修改EXCEL文件后缀为zip亦或rar,打开压缩文件来查看容器内的内容:
在这里插入图片描述


局部与全局定制功能区

EXCEL文件格式是xlsm的,定制功能区只会在该工作簿生效。定制全局功能,定制xlamEXCEL插件,加载插件,全局生效(本机打开任何工作表会自动加载插件,插件内自定义功能都会存在、生效)
插件添加步骤如下:

  1. 创建插件:新建EXCEL工作簿,另存为xlam格式。
  2. 打开任意一个工作簿,点击开发工具选项卡 -> 加载项命令组 -> Excel加载项,浏览找到xlam插件勾选加载即可;
    在这里插入图片描述

如何显示开发工具选项卡:
文件 -> 选项 -> 自定义功能区 -> 右侧勾选开发工具 -> 确定
在这里插入图片描述


使用XML自定义功能区

可以使用XML标记自定义UI功能区,添加定制Ribbon两个步骤:

  1. 创建定制所需的XML文件
  2. 将定制XML文件插入到工作簿文件中。

方法一:手动生成XML关联

步骤如下:

  1. 编写自定义过程(这里插入按钮示例):
    新建插件(这里使用xlam:UDL.xlam),开发工具 -> ALT+F11打开VBE窗口 -> 插入[模块] -> 模块内输入以下代码 -> 保存 -> 退出
    加载插件请见全局定义功能区加载插件操作
Sub show_activesheet_name(ByVal control As IRibbonControl)
' 这里是插入一个按钮,过程必须指明形参,比如这里是IRibbonControl
MsgBox ActiveSheet.Name
End Sub
  1. 编写定制XML文件
    2.1 新建一个文件夹:customUI
    2.2 文件夹内新建xml文件:customUI.xml(可新建txt文件,编辑后修改后缀为xml)
    2.3 打开xml文件编写以下内容:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
    <tabs>
        <tab id="myTab" label="my tab">
            <group id="group1" label="worksheet">
                <button id="button1" label="show name" size="large" onAction="show_activesheet_name"  />
            </group>
        </tab>
    </tabs>
</ribbon>
</customUI>

其中id属性是按钮的id名称,label属性是按钮显示的文本,size属性是按钮的大小,onAnction属性指定回调函数名称,

imageMso属性设置按钮的图标(excel内置图标),可通过下载的文件“XML内置图标”查看,按钮加入图标比如:
<button id="button1" label="show name" size="large" onAction="show_activesheet_name" imageMso="MultiplePages />"

属性写的顺序可以调换

在这里插入图片描述

  1. 修改插件UDL.xlam文件后缀为zip:UDL.zip,打开压缩文件,将2.1步骤的customUI文件夹拖动到该压缩包内
    在这里插入图片描述
  2. 编写res文件,添加工作簿与自定义UI文件关联语句。
    打开压缩包内的_rels文件夹的_rels文件,在最后一个Relationship标记与Relationships标记之间添加以下内容:
    可以先将._rels文件解压出来编辑保存,删除zip内的_rels文件,再拖动修改的._rels文件到压缩包的__rels文件夹内;
<Relationship Id="someID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml" />

完成内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
<Relationship Id="someID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml" />
</Relationships>

在这里插入图片描述

  1. 第3步骤的UDL.zip文件后缀还原为xlam:UDL.xlam

  2. 打开任意一个工作簿,加载UDL.xlam插件,点击按钮如下图所示:
    在这里插入图片描述

  3. 完成

方法二:使用UI编辑器

安装打开界面如下:
在这里插入图片描述

使用UI编辑器,可以省去修改文件名后缀修改.rels文件等过程,可快速定制功能区,步骤如下:

  1. UI编辑器打开EXCEL插件
  2. 编辑窗口编写XML代码
  3. 保存退出
  4. 再打开文件即可看到自定义UI效果
    在这里插入图片描述

书写完xml可以使用UI编辑器的回调程序功能生成不带内容的过程,复制到VBE模块再进一步编写程序:

'Callback for button1 onAction
Sub show_activesheet_name(control As IRibbonControl)
End Sub

在这里插入图片描述
使用UI编辑器可以快速定制Excel 2010的功能区,但该工具软件不支持中文。如果需要制作中文界面,可先使用UI编辑器快速制作出界面,然后再使用16.2节介绍的方法,从Excel的压缩文件中把customUI文件夹解压出来,将customUI.xml文件中的显示内容修改为中文,再在xml文件头添加上编码语句:

<?xml version="1.0" encoding="gbk" ?>

在这里插入图片描述
其他说明:xml只是定制了面板及关联VBA过程,具体过程只要在执行前在EXCEL里编写即可。

示例:

复选框
<checkBox id="c1" label="Show 0" onAction="CC"/>
<toggleButton imageMso="TranslationToolTip" id="t1" size="large" 
label="Is Number" onAction="TT"/>

回调程序

'Callback for c1 onAction
Sub CC(control As IRibbonControl, pressed As Boolean)
' 编写执行过程
' pressed参数为ture表明复选框被选中
END SUB
添加组合框和下拉框

其中item用于设置组合框或下拉框的选项

<group id="g1" label="My group1">
   <comboBox id="C1" label="Sheet Select1" onChange="FFF"> 
       <item id="item1" label="Sheet1" imageMso="_1" /> 
       <item id="item2" label="Sheet2" imageMso="_2" /> 
       <item id="item3" label="Sheet3" imageMso="_3" /> 
   </comboBox>
   <dropDown id="Dr1"  label="Sheet Select2" onAction="GGG">  
       <item id="Dept1" label="Sheet1" /> 
       <item id="Dept2" label="Sheet2" />    
       <item id="Dept3" label="Sheet3" /> 
   </dropDown>
</group>

回调程序如下:
text参数表示组合框或者下拉框选项显示的文本
index是下拉框选项的索引,从0开始,第一个是0。

'Callback for C1 onChange
Sub FFF(control As IRibbonControl, text As String)
  Sheets(text).Select
End Sub

'Callback for Dr1 onAction
Sub GGG(control As IRibbonControl, id As String, index As Integer)
  Sheets(index + 1).Select
End Sub


XML语句相关

  1. 区分大小写
  2. 属性编写顺序可以调换,比如下面两条语句是等价的:
<button id="button1" label="show name" size="large" onAction="show_activesheet_name" />
<button onAction="show_activesheet_name" id="button1" size="large" label="show name"   />

样例中使用的xml说明:

  • <customUI>元素是XML的根容器,名称集(namespace)将它识别为RibbonX文档。
  • <ribbon>元素是一个联系到可见的Ribbon的所有变化的容器。元素也可以包含一个元素,用来重复利用内置控件。
    -\ <tabs>元素是一个联系到Ribbon中现有的或新的选项卡的所有变化的容器。元素也能包含、/或元素来控制Ribbon的相应部分。
  • <tab id=“myTab” label=“my tab”>元素是真正定制的开始,创建自定义的选项卡。包含在定制中的每项都必须至少有一个id。有3种类型的id属性:id、idMso和idQ,分别指定自定义项、内置项及与多个文件共享的项。在本例中,由于是创建一个自定义选项卡,因此使用id属性并给它一个唯一的名称。
  • <group id=“group1” label=“worksheet”>元素创建第一组并打开其中的内容定义,显示在选项卡中的组与它们在RibbonX文件中定义的顺序相同,每列显示3行,然后再从新列开始显示。
  • <button id=“button1” label=“show name” size=“large” onAction=“show_activesheet_name” />元素添加一个按钮,该按钮显示名称为“show name”。单击该按钮时执行工作簿中的“show name”宏。
  • imageMso属性表可以设置命令内置的图标展示,比如:
<button id="button2" onAction="copy1" size="large" imageMso="Copy" />

• tab标签的insertBeforeMso属性可以设置选项卡位置在哪个选项卡前面,比如在插入选项卡前

<tab id="tab1" label="My Tab1" insertBeforeMso="TabInsert">
</tab>

同一命令组命令间插入分割线,在不同命令间编写该xml

<separator id="S1" />

• 接下来使用和等代码结束各元素的定义。


自带的选项卡及命令组

选项卡名称idMso
开始TabHome
插入TabInsert
页面布局TabPageLayoutExcel
公式TabFormulas
数据TabData
视图TabReview

屏蔽自带功能

屏蔽命令,设置enabled属性值,false不显示
屏蔽选项卡,使用visible属性值,false不显示
这里的idMso指的是引用内置的功能

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<commands>
    <command idMso="Copy" enabled="false" />
</commands>
<ribbon>
    <tabs>
        <tab inMso="TabInsert" visible="false" />
    </tabs>
</ribbon>
</customUI>

基本的按钮控件

按钮

是最普通的控件,可带有图标和标题,能接受用户的单击,并调用相应的VBA过程完成任务。例如本章前面的例子中,就为按钮指定了一个VBA过程。按钮控件的XML标识为。

切换按钮

切换按钮是一个可单击项,每次单击时在按下和非按下状态之间切换,常用于组中切换多个可能状态的某个属性,该组中每次仅一个按钮能被按下。切换按钮控件的XML标识为。

复选框复

可通过单击切换状态,常用于控制一个UI控件是否可见。复选框控件的XML标识为。

分隔条分隔条

用于提供组中控件可见的分隔的垂直条。分隔条控件的XML标识为。

编辑框编辑框

可接受用户的输入。编辑框控件的XML标识为。

下拉库列表

由一个下拉控件和一组其他控件组成。库列表中可以包含不同类型的控件,是最灵活的RibbonX控件之一。下拉库列表控件的XML标识为。

组合框控件

可以在该控件中进行输入,同时提供下拉列表供选取。下拉列表的内容是一组项目元素。组合框控件的XML标识为

按钮组控件

用来控制其他控件的布局,在相关控件之间带有边框和隔断,如图16-21所示。按钮组控件的XML标识符为。按钮组容器控件中可包含以下控件。

菜单控件

功能区中的菜单控件是一种弹出式菜单。其组成元素由RibbonX文件定义。菜单可以包含按钮或其他菜单,即允许创建层次菜单结构。


控件的基本属性

控件属性功能区中所有控件类型都有一些属性,可以使用这些属性修改它们的外观。下面列出控件的常用属性。

ID类属性

每个控件都必须有一个唯一的ID,由一个最多有1 024个字符的字符串组成,ID属性分以下3类。

  • id:自定义控件使用这个属性。
  • idMso:内置控件的ID值,使用内置的控件时,必须指明该内置控件的idMso。
  • idQ:被限制控件的ID。

外观属性

外观属性用来控制控件的可见性、标签和悬浮提示等信息,常用的有以下属性。

  • label:设置控件的标题。
  • title:设置菜单的标题文本,用于menu和menuSeparator控件。
  • screentip:设置鼠标悬浮在控件上时显示的小提示。
  • supertip:设置鼠标悬浮在控件上时显示的大提示。
  • showLabel:设置是否显示控件标签,取值为True和False。
  • size:设置控件的尺寸,可设置为normal和large,控件正常尺寸(normal)占用一行,大尺寸(large)占用三行。
  • visible:设置控件是否可见,取值为True和False。

图像属性

带图像的控件可以使用自定义的图像,也可使用内置控件的图像。

  • image:使用此属性设置自定义图像的名称。
  • imageMso:使用此属性设置内置控件的名称,用来引用内置控件的图像。
  • showImage:设置是否显示一个控件的图像,取值为True和False。

其他属性

  • maxLength:设置editBox或comboBox控件文字输入的最大长度。
  • itemHeight:设置gallery控件中库项目的高度,以像素为单位。
  • itemSize:设置menu中项目的尺寸,可设置为normal和large,大项目不但显示描述也显示标签。
  • itemWidth:设置gallery控件中库项目的宽度,以像素为单位。• showItemImage:设置在comboBox、dropDown或gallery控件中,提示是否在下拉项中显示图像。
  • enabled:设置控件是否有效,如果设为False,则该控件为灰色,不能操作。
  • keytip:设置访问控件的快捷键。
  • boxStyle:设置在box控件中的水平排列图标(默认)或垂直排列图标,取值为Horizontal或Vertical。
  • columns:设置gallery控件库中的列数。
  • rows:设置gallery控件库中的行数。
  • description:设置控件的长描述,当菜单的itemSize设置为大时显示在菜单中,用于button、toggleButton、splitButton、checkbox、menu、dynamicMenu、gallery等控件。

功能区快速生成按钮

建议使用上方的定制方法

创建工具栏

可以使用CommandBars.Add方法。它的具体语法如下:
CommandBars.Add(Name, Position, MenuBar, Temporary)
参数如下:

  • Name:新命令栏的名称。如果省略此参数,则为命令栏指定默认名称“Custom 1”
  • Position:新命令栏的位置或类型。只作用于03版本excel
  • MenuBar:设置为True时,将以新命令栏替换活动菜单栏
  • Temporary:如果为True,则将使用新命令栏变成临时命令栏,在应用程序关闭时自动删除。

添加按钮

CommandBars.Controls.Add(Type, Id, Parameter, Before, Temporary)
几个参数:

  • Type:要添加到指定命令栏中的控件类型,比如msoControlButton、msoControlEdit、msoControlDropdowm、msoControlComboBox、msoControlPopup;
  • Id:指定内置控件的整数
  • Parameter:对于内置孔家,容器应用程序使用该参数运行命令。对于自定义空间,可以使用该参数向VB过程传递信息。
  • Before:一个指示新控件在命令栏上位置的参数,忽略,则添加到末端。
  • Temporary:设置为True时将控件设置为临时控件,默认值为False。
    默认在“加载项”选项卡里面;

按钮常见的几个属性

  • FaceId:按钮显示图标
  • OnAction:点击按钮执行的过程
  • BeginGroup: '如果指定的命令栏现实在命令栏上控件组的最前面,则设置为True。
  • Style:获取或设置CommandBarButton的空间的显示方式
  • Vision:控件是否可见
  • ShortcutText:获取或者设置当按钮出现命令栏上时CommandBarButton控件旁边显示的快捷键文字。
Sub 按钮添加()
' vbe环境里直接执行该过程即会程成对应的按钮,
On Error Resume Next
Dim mybar As CommandBarButton
' 如果隐藏按钮在,先删除该按钮再生成
Application.CommandBars("CELL").Controls("隐藏").Delete
Set mybar = Application.CommandBars(1).Controls.Add(before:=1)
With mybar
    .Caption = "隐藏"
    .BeginGroup = True  
    .FaceId = 483
    .Style = msoButtonIconAndCaption
    .OnAction = "ABC"
End With
End Sub

Sub ABC()
ActiveSheet.Visible = 2
End Sub

部分内容摘自蓝色幻想视频资料,《精通EXCEL VBA》-伍云辉、《VBA程序开发自学宝典》-罗刚君

  • 13
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Qt自定义Ribbon菜单可以通过以下步骤完成。 首先,创建一个新的Qt项目。在项目中包含QtRibbon控件相关的头文件和库。 其次,定义你想要的Ribbon菜单的外观和布局。可以使用Qt提供的默认样式,也可以通过修改样式表来自定义外观。 接下来,创建菜单项。可以使用QAction或者QMenu来创建菜单项,然后将它们添加到Ribbon菜单中。 然后,设置菜单项的图标和文字。可以使用QIcon类来设置菜单项的图标,使用setText()方法来设置菜单项的文字。 接着,为菜单项添加功能。可以连接菜单项的triggered()信号到槽函数中,实现菜单项的点击功能。 最后,展示Ribbon菜单。将Ribbon菜单添加到主窗口的布局中,然后显示主窗口。 需要注意的是,Ribbon菜单是一个相对较新的控件,并且在不同的平台上可能有不同的外观和行为。因此,在自定义Ribbon菜单时,需要仔细测试和调整以确保在不同平台上都有良好的用户体验。 希望以上回答能对您有所帮助。 ### 回答2: Qt是一个跨平台的C++开发框架,提供了丰富的功能和工具,可以用于开发桌面应用程序。自定义Ribbon菜单是其中的一个功能。 Ribbon菜单是一种常见的用户界面设计元素,它通常用于快速访问常用的功能和工具。Qt提供了QtitanRibbon插件,可以方便地实现自定义Ribbon菜单。 要自定义Ribbon菜单,首先需要安装QtitanRibbon插件。安装完成后,可以在Qt Designer中添加Ribbon控件,并根据需要调整其外观和行为。可以设置菜单的布局、样式、颜色等属性,并添加自定义的按钮和选项。 在代码中,可以使用QtitanRibbon提供的API来处理Ribbon菜单的事件和用户交互。可以定义槽函数来响应按钮的点击、选项的选择等操作。通过槽函数,可以实现具体的功能逻辑,例如打开文件、保存数据等操作。 除了使用QtitanRibbon插件,也可以使用Qt自带的工具和功能来实现自定义Ribbon菜单。可以使用QToolBar、QAction等类来创建菜单的控件和按钮,并使用信号和槽机制来处理用户的交互。可以自定义菜单的布局、样式和行为,并根据需要添加自定义的功能和工具。 总之,通过使用Qt提供的功能和工具,可以方便地实现自定义Ribbon菜单。无论是使用QtitanRibbon插件还是Qt自带的功能,都可以根据需求来设计和实现用户友好的Ribbon菜单界面。 ### 回答3: 在Qt中自定义Ribbon菜单可以通过以下步骤实现: 1. 创建一个新的Qt应用程序项目并打开你想要添加自定义Ribbon菜单的主窗口。 2. 在主窗口中添加一个QMainWindow和一个QMenuBar。 3. 创建一个新的QWidget,作为Ribbon菜单的容器。 4. 将QWidget设置为QMainWindow的centralWidget(),以便显示Ribbon菜单。 5. 使用QVBoxLayout或其他布局管理器,将Ribbon菜单中的各个功能区或选项分组逐个添加到QWidget中。 6. 为每个功能区创建一个QGroupBox,并使用QGridLayout或其他布局管理器在功能区中添加需要的控件和操作。 7. 根据需要向每个功能区中添加按钮、复选框、下拉列表等控件,并为它们添加相应的槽函数或信号连接。 8. 在主窗口的菜单栏中添加一个“Ribbon”选项,用于显示/隐藏Ribbon菜单。 9. 在“Ribbon”选项的槽函数中,通过QWidget的setVisible()函数来显示或隐藏Ribbon菜单。 10. 运行程序,你将看到自定义Ribbon菜单在主窗口中显示,并且可以与其中的控件进行交互。 需要注意的是,Qt并没有提供内置的Ribbon菜单控件,因此我们需要自己创建一个类似于Ribbon菜单的容器,并在其中添加各种控件和操作。此外,可以根据自己的需求和设计风格来自定义Ribbon菜单的样式和布局。 希望以上回答能对你有所帮助。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值