文章目录

  • 功能区组成
  • EXCEL2010文件格式
  • 局部与全局定制功能区
  • 使用XML自定义功能区
    • 方法一:手动生成XML关联
    • 方法二:使用UI编辑器
    • 示例:
      • 复选框
      • 添加组合框和下拉框
  • XML语句相关
  • 自带的选项卡及命令组
  • 屏蔽自带功能
  • 基本的按钮控件
    • 按钮
    • 切换按钮
    • 复选框复
    • 分隔条分隔条
    • 编辑框编辑框
    • 下拉库列表
    • 组合框控件
    • 按钮组控件
    • 菜单控件
  • 控件的基本属性
    • ID类属性
    • 外观属性
    • 图像属性
    • 其他属性
  • 功能区快速生成按钮
    • 创建工具栏
    • 添加按钮
    • 按钮常见的几个属性

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

功能区组成

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

#mermaid-svg-IUbj1UFG07zNnAqD .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-IUbj1UFG07zNnAqD .label text{fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD .node rect,#mermaid-svg-IUbj1UFG07zNnAqD .node circle,#mermaid-svg-IUbj1UFG07zNnAqD .node ellipse,#mermaid-svg-IUbj1UFG07zNnAqD .node polygon,#mermaid-svg-IUbj1UFG07zNnAqD .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-IUbj1UFG07zNnAqD .node .label{text-align:center;fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD .node.clickable{cursor:pointer}#mermaid-svg-IUbj1UFG07zNnAqD .arrowheadPath{fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-IUbj1UFG07zNnAqD .flowchart-link{stroke:#333;fill:none}#mermaid-svg-IUbj1UFG07zNnAqD .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-IUbj1UFG07zNnAqD .edgeLabel rect{opacity:0.9}#mermaid-svg-IUbj1UFG07zNnAqD .edgeLabel span{color:#333}#mermaid-svg-IUbj1UFG07zNnAqD .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-IUbj1UFG07zNnAqD .cluster text{fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-IUbj1UFG07zNnAqD .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-IUbj1UFG07zNnAqD text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-IUbj1UFG07zNnAqD .actor-line{stroke:grey}#mermaid-svg-IUbj1UFG07zNnAqD .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-IUbj1UFG07zNnAqD .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-IUbj1UFG07zNnAqD #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-IUbj1UFG07zNnAqD .sequenceNumber{fill:#fff}#mermaid-svg-IUbj1UFG07zNnAqD #sequencenumber{fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD #crosshead path{fill:#333;stroke:#333}#mermaid-svg-IUbj1UFG07zNnAqD .messageText{fill:#333;stroke:#333}#mermaid-svg-IUbj1UFG07zNnAqD .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-IUbj1UFG07zNnAqD .labelText,#mermaid-svg-IUbj1UFG07zNnAqD .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-IUbj1UFG07zNnAqD .loopText,#mermaid-svg-IUbj1UFG07zNnAqD .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-IUbj1UFG07zNnAqD .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-IUbj1UFG07zNnAqD .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-IUbj1UFG07zNnAqD .noteText,#mermaid-svg-IUbj1UFG07zNnAqD .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-IUbj1UFG07zNnAqD .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-IUbj1UFG07zNnAqD .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-IUbj1UFG07zNnAqD .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-IUbj1UFG07zNnAqD .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IUbj1UFG07zNnAqD .section{stroke:none;opacity:0.2}#mermaid-svg-IUbj1UFG07zNnAqD .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-IUbj1UFG07zNnAqD .section2{fill:#fff400}#mermaid-svg-IUbj1UFG07zNnAqD .section1,#mermaid-svg-IUbj1UFG07zNnAqD .section3{fill:#fff;opacity:0.2}#mermaid-svg-IUbj1UFG07zNnAqD .sectionTitle0{fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD .sectionTitle1{fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD .sectionTitle2{fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD .sectionTitle3{fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IUbj1UFG07zNnAqD .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-IUbj1UFG07zNnAqD .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IUbj1UFG07zNnAqD .grid path{stroke-width:0}#mermaid-svg-IUbj1UFG07zNnAqD .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-IUbj1UFG07zNnAqD .task{stroke-width:2}#mermaid-svg-IUbj1UFG07zNnAqD .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IUbj1UFG07zNnAqD .taskText:not([font-size]){font-size:11px}#mermaid-svg-IUbj1UFG07zNnAqD .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IUbj1UFG07zNnAqD .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-IUbj1UFG07zNnAqD .task.clickable{cursor:pointer}#mermaid-svg-IUbj1UFG07zNnAqD .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-IUbj1UFG07zNnAqD .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-IUbj1UFG07zNnAqD .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-IUbj1UFG07zNnAqD .taskText0,#mermaid-svg-IUbj1UFG07zNnAqD .taskText1,#mermaid-svg-IUbj1UFG07zNnAqD .taskText2,#mermaid-svg-IUbj1UFG07zNnAqD .taskText3{fill:#fff}#mermaid-svg-IUbj1UFG07zNnAqD .task0,#mermaid-svg-IUbj1UFG07zNnAqD .task1,#mermaid-svg-IUbj1UFG07zNnAqD .task2,#mermaid-svg-IUbj1UFG07zNnAqD .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-IUbj1UFG07zNnAqD .taskTextOutside0,#mermaid-svg-IUbj1UFG07zNnAqD .taskTextOutside2{fill:#000}#mermaid-svg-IUbj1UFG07zNnAqD .taskTextOutside1,#mermaid-svg-IUbj1UFG07zNnAqD .taskTextOutside3{fill:#000}#mermaid-svg-IUbj1UFG07zNnAqD .active0,#mermaid-svg-IUbj1UFG07zNnAqD .active1,#mermaid-svg-IUbj1UFG07zNnAqD .active2,#mermaid-svg-IUbj1UFG07zNnAqD .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-IUbj1UFG07zNnAqD .activeText0,#mermaid-svg-IUbj1UFG07zNnAqD .activeText1,#mermaid-svg-IUbj1UFG07zNnAqD .activeText2,#mermaid-svg-IUbj1UFG07zNnAqD .activeText3{fill:#000 !important}#mermaid-svg-IUbj1UFG07zNnAqD .done0,#mermaid-svg-IUbj1UFG07zNnAqD .done1,#mermaid-svg-IUbj1UFG07zNnAqD .done2,#mermaid-svg-IUbj1UFG07zNnAqD .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-IUbj1UFG07zNnAqD .doneText0,#mermaid-svg-IUbj1UFG07zNnAqD .doneText1,#mermaid-svg-IUbj1UFG07zNnAqD .doneText2,#mermaid-svg-IUbj1UFG07zNnAqD .doneText3{fill:#000 !important}#mermaid-svg-IUbj1UFG07zNnAqD .crit0,#mermaid-svg-IUbj1UFG07zNnAqD .crit1,#mermaid-svg-IUbj1UFG07zNnAqD .crit2,#mermaid-svg-IUbj1UFG07zNnAqD .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-IUbj1UFG07zNnAqD .activeCrit0,#mermaid-svg-IUbj1UFG07zNnAqD .activeCrit1,#mermaid-svg-IUbj1UFG07zNnAqD .activeCrit2,#mermaid-svg-IUbj1UFG07zNnAqD .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-IUbj1UFG07zNnAqD .doneCrit0,#mermaid-svg-IUbj1UFG07zNnAqD .doneCrit1,#mermaid-svg-IUbj1UFG07zNnAqD .doneCrit2,#mermaid-svg-IUbj1UFG07zNnAqD .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-IUbj1UFG07zNnAqD .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-IUbj1UFG07zNnAqD .milestoneText{font-style:italic}#mermaid-svg-IUbj1UFG07zNnAqD .doneCritText0,#mermaid-svg-IUbj1UFG07zNnAqD .doneCritText1,#mermaid-svg-IUbj1UFG07zNnAqD .doneCritText2,#mermaid-svg-IUbj1UFG07zNnAqD .doneCritText3{fill:#000 !important}#mermaid-svg-IUbj1UFG07zNnAqD .activeCritText0,#mermaid-svg-IUbj1UFG07zNnAqD .activeCritText1,#mermaid-svg-IUbj1UFG07zNnAqD .activeCritText2,#mermaid-svg-IUbj1UFG07zNnAqD .activeCritText3{fill:#000 !important}#mermaid-svg-IUbj1UFG07zNnAqD .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IUbj1UFG07zNnAqD g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-IUbj1UFG07zNnAqD g.classGroup text .title{font-weight:bolder}#mermaid-svg-IUbj1UFG07zNnAqD g.clickable{cursor:pointer}#mermaid-svg-IUbj1UFG07zNnAqD g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-IUbj1UFG07zNnAqD g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-IUbj1UFG07zNnAqD .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-IUbj1UFG07zNnAqD .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-IUbj1UFG07zNnAqD .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-IUbj1UFG07zNnAqD .dashed-line{stroke-dasharray:3}#mermaid-svg-IUbj1UFG07zNnAqD #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IUbj1UFG07zNnAqD #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IUbj1UFG07zNnAqD #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-IUbj1UFG07zNnAqD #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-IUbj1UFG07zNnAqD #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IUbj1UFG07zNnAqD #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IUbj1UFG07zNnAqD #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IUbj1UFG07zNnAqD #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-IUbj1UFG07zNnAqD .commit-id,#mermaid-svg-IUbj1UFG07zNnAqD .commit-msg,#mermaid-svg-IUbj1UFG07zNnAqD .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IUbj1UFG07zNnAqD .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IUbj1UFG07zNnAqD .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IUbj1UFG07zNnAqD g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IUbj1UFG07zNnAqD g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-IUbj1UFG07zNnAqD g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-IUbj1UFG07zNnAqD g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-IUbj1UFG07zNnAqD g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-IUbj1UFG07zNnAqD .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-IUbj1UFG07zNnAqD .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-IUbj1UFG07zNnAqD .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-IUbj1UFG07zNnAqD .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-IUbj1UFG07zNnAqD .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-IUbj1UFG07zNnAqD .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-IUbj1UFG07zNnAqD .edgeLabel text{fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-IUbj1UFG07zNnAqD .node circle.state-start{fill:black;stroke:black}#mermaid-svg-IUbj1UFG07zNnAqD .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-IUbj1UFG07zNnAqD #statediagram-barbEnd{fill:#9370db}#mermaid-svg-IUbj1UFG07zNnAqD .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-IUbj1UFG07zNnAqD .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-IUbj1UFG07zNnAqD .statediagram-state .divider{stroke:#9370db}#mermaid-svg-IUbj1UFG07zNnAqD .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-IUbj1UFG07zNnAqD .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-IUbj1UFG07zNnAqD .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-IUbj1UFG07zNnAqD .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-IUbj1UFG07zNnAqD .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-IUbj1UFG07zNnAqD .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-IUbj1UFG07zNnAqD .note-edge{stroke-dasharray:5}#mermaid-svg-IUbj1UFG07zNnAqD .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-IUbj1UFG07zNnAqD .error-icon{fill:#522}#mermaid-svg-IUbj1UFG07zNnAqD .error-text{fill:#522;stroke:#522}#mermaid-svg-IUbj1UFG07zNnAqD .edge-thickness-normal{stroke-width:2px}#mermaid-svg-IUbj1UFG07zNnAqD .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-IUbj1UFG07zNnAqD .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-IUbj1UFG07zNnAqD .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-IUbj1UFG07zNnAqD .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-IUbj1UFG07zNnAqD .marker{fill:#333}#mermaid-svg-IUbj1UFG07zNnAqD .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-IUbj1UFG07zNnAqD {color: rgba(0, 0, 0, 0.75);font: ;}

功能区: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>
  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 SubSub ABC()
ActiveSheet.Visible = 2
End Sub

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

EXCEL自定义功能区Ribbon相关推荐

  1. excel自定义功能区图标_将您自己的图标添加到Excel自定义功能区选项卡

    excel自定义功能区图标 Are you building custom tabs for your workbooks yet? Last year, I wrote a couple of ar ...

  2. Excel VBA 实现Ribbon自定义功能区

    Excel VBA 实现Ribbon自定义功能区 2022.12.3修改 目录 自定义功能区的实现 1.编写执行代码生成.xlam文件,拷贝到%APPDATA%\Microsoft\AddIns\ 2 ...

  3. Excel VBA自定义功能区

    在 Excel 编写代码,离不开界面的导航.之前为了简单,经常将控件放置在工作表上.但这种方法显得不专业.Office 其实允许通过代码或者使用 XML 文件的方式来定义功能区.本篇介绍自定义功能区的 ...

  4. 如何将Mindjet的宏放到自定义功能区

    如何将Mindjet的宏放到自定义功能区 虽然很早就接触了思维软件Mindjet Manager,但最近才用得比较频繁.现在软件已发布到Mindjet15版,官方原版终于支持中文了,但我还是比较习惯1 ...

  5. excel自定义排序出错_使用Excel自定义列表按您的方式进行排序

    excel自定义排序出错 You know how to sort an Excel list alphabetically, and with Excel 2007 you can even sor ...

  6. WPS 自定义功能区添加宏(VBA)设定的功能

    MicroOffice Excel可以在"自定义功能区"菜单中,可以直接添加"宏".但是WPS Excel的"自定义功能区"设置菜单不支持& ...

  7. Excel 2007功能区开发大全

    细品RibbonX(1):MS Office界面发展简史 细品RibbonX(2):认识Office的新界面-功能区(Ribbon) 细品RibbonX(3):认识快速访问工具栏(QAT) 细品Rib ...

  8. 工具栏自定义_EXCEL LESSON12 自定义功能区菜单及工具栏(1/3)

    不确定能否上链接,带附件的,微信公众号,搜[财会人nAzy],同课程内有链接地址. --------------- 函数.应用,讲完了,个人感觉掌握前面课程足够快速上手,是否如此,有待时间验证. 接下 ...

  9. excel窗体最大化最小化_最小化Excel 2007功能区

    excel窗体最大化最小化 If you're working on a big worksheet, you might want to see as many rows as possible. ...

  10. EXCEL自定义菜单,做插件必备。

    最近在公司用到EXCEL需要导入用友U8的数据.所以就想着把这功能做成EXCEL的插件形式.虽然最后没有用上,但是这些知识学习了一下.记下来备用.也可以给还在找这方面资料的同学一起学习一下. 在公司写 ...

最新文章

  1. MySQL主从同步机制及同步中的问题处理
  2. Vue 教程第十七 篇—— Vuex 之 module
  3. django 不用自带的mysql_python笔记二 django自带后台管理系统、模版渲染以及使用mysql数据库...
  4. 用户操作-用户详情查询流程分析
  5. matlab 自再现模,平行平面腔自再现模FoxLi数值迭代解法及MATLAB实现
  6. express+handlebars 快速搭建网站前后台
  7. 【今日CV 视觉论文速览】14 Nov 2018
  8. 【TOJ1132】Square Root,二次同余方程
  9. SystemCenter2012SP1实践(12)服务器、网络和存储配置
  10. 物理学报 LaTeX模板(自编)
  11. python调用arcpy函数_AGS Python开发-ArcPy开发基础
  12. 微信支付的商户号和服务商的区别,以及什么是子账户
  13. Java中的IO整理完整版(一)
  14. 如何让Bing快速收录你的网站?
  15. docker 安装 mysql ,redis ,nginx,tomcat,rabbitmq,fastdfs,kafka,mongo,elasticsearch
  16. Vue2开发的读书WebAPP
  17. 解析淘口令获取商品id,包含有效时间
  18. 安利:那些让你欲罢不能的宝贝网站
  19. java GUI mysql实现的薪资工资管理系统项目源码附带视频指导教程
  20. 波浪下划线怎么设置_波浪线符号(word小技巧)

热门文章

  1. OpenCV3编程入门(毛星云)读书笔记(一)
  2. center os 安装 mysql_MySQL数据库之center os 7 Mysql 安装
  3. 2019马哥python的百度网盘_马哥 2018 Python 全栈视频
  4. 基于微信小程序视频点播系统 开题报告
  5. 选型宝访谈:如何用好移动报销云平台,解放全员工作效率?
  6. html5朋友圈评论代码,微信朋友圈评论隐藏文字,超级好玩
  7. 内网使用Maven本地仓库环境
  8. IDEA导入项目出现红色J问题解决
  9. RSA密钥对生成过程具体实践
  10. CH341驱动安装失败解决方法