Excel VBA开发技术大全 第20章.docx
《Excel VBA开发技术大全 第20章.docx》由会员分享,可在线阅读,更多相关《Excel VBA开发技术大全 第20章.docx(39页珍藏版)》请在冰豆网上搜索。
ExcelVBA开发技术大全第20章
第20章使用RibbonX
对用户来说,操作界面是Excel2007中改动最大之处。
在Excel2007中,使用RibbonX(功能区)代替了传统的菜单和工具栏。
另外,Excel2007采用OfficeOpenXML文件格式保存工作簿。
用户通过XML可直接访问工作簿中的内容,并可通过XML自定义RibbonX。
20.1了解Office(2007)OpenXML文件格式
MicrosoftOffice2007引入了一种基于XML的新文件格式。
这种新格式称为MicrosoftOfficeOpenXMLFormats,适用于Word2007、Excel2007和PowerPoint2007。
20.1.1OfficeOpenXML的优点
OfficeOpenXML有许多优点,它不仅适用于开发人员及其构建的解决方案,而且适用于个人以及各种规模的组织。
主要有以下优点:
1.压缩文件
OfficeOpenXML文件会自动压缩,某些情况下最多可缩小75%。
OfficeOpenXML使用zip压缩技术来存储文档,由于这种格式可以减少存储文件所需的磁盘空间,并可以降低通过电子邮件、网络和Internet发送文件时所需的带宽,因而可能节省成本。
在打开文件时,这种格式可以自动解压缩;而在保存文件时,这种格式又可以重新自动压缩。
2.改进了受损文件的恢复
使用OfficeOpenXML格式保存的文档不是二进制格式,而是使用文本格式以一定的XML结构以模块形式进行组织,从而使文件中的不同数据组件彼此分隔。
这样,即使文件中的某个组件(例如,图表或表格)受到损坏,文件本身还是可以打开。
3.易于检测到包含宏的文档
根据工作簿是否包含宏,在保存工作簿时文件的扩展名也有所不同。
无宏的工作簿扩展名为“.xlsx”,包含宏的工作簿扩展名为“.xlsm”。
这样,通过工作簿名称即可知道文件是否包含宏代码。
4.更好的隐私保护和更强有力的个人信息控制
可以采用保密方式共享文档,因为使用文档检查器可以轻松地识别和删除个人身份信息和业务敏感信息,例如,作者姓名、批注、修订和文件路径。
5.更好的业务数据集成性和互操作性
将OfficeOpenXML作为Office2007发布版产品集的数据互操作性框架意味着:
文档、工作表、演示文稿和表单都可以采用XML文件格式保存,任何人都可免费使用该文件格式并获得该文件格式的许可证,而不必支付版权费。
Office还支持客户定义的XML架构,用于增强现有Office文档类型的功能。
这意味着客户在现有系统中可以轻松解除信息锁定,使用熟悉的Office程序对相应信息进行操作。
在Office中创建的信息很容易由其他业务应用程序所采用。
打开和编辑Office文件只需要一个ZIP实用工具和一个XML编辑器即可。
6.向后兼容性
OfficeOpenXML是向后兼容的,它可以兼容早期的版本,例如Office2000,OfficeXP和Office2003。
这些版本的用户下载一个免费的更新,即可在以前版本中打开Office2007的文档。
20.1.2Excel2007OpenXML文件结构
下面通过对如图20-1所示的工作簿文件进行剖析,以使读者深入地了解Excel2007OpenXML文件的结构。
图20-1Excel2007工作簿
Excel2007OpenXML文件其实是一个zip文件。
为了分析其结构,需要将其解压出来。
因此,计算机系统中需要安装管理zip文件的软件(例如WinZip、WinRar等)。
下面列出具体的步骤:
(1)将工作簿文件名“测试Excel2007文件结构.xlsx”的后面添加一个“.zip”扩展名,修改为“测试Excel2007文件结构.xlsx.zip”。
(2)接着当弹出如图20-2所示的警告信息,单击【是】按钮,完成文件名的修改。
(3)将上步更名的文件解压,得到如图20-3所示的文件目录结构。
图20-2警告信息图20-3解压后的文件结构
(4)在解压后的文件夹中,最重要的文件是文件夹xl中的workbook.xml文件,该文件的代码如下:
xmlversion="1.0"encoding="UTF-8"standalone="yes"?
>
-//schemas.openxmlformats.org/spreadsheetml/2006/main"xmlns:
r="http:
//schemas.openxmlformats.org/officeDocument/2006/
relationships">
"4505"/>
-
Height="5070"/>
-
id="rId1"/>
id="rId2"/>
id="rId3"/>
workbook.xml文件包含一对标签,其中的每个元素都代表Excel2007文件中的一个,工作表的名称就是其name属性的值,在上面的代码中,分别有3个工作表,即工作表1、工作表2和工作表3。
元素中r:
id属性的值指出保存工作表数据的XML文件。
(5)打开“xl/_rels/workbook.xml.rels”文件,其内容如下所示:
xmlversion="1.0"encoding="UTF-8"standalone="yes"?
>
-//schemas.openxmlformats.org/package/2006/relationships">
Type="http:
//schemas.openxmlformats.org/officeDocument/2006/relationsh-ips/worksheet"
Target="worksheets/sheet3.xml"/>
Type="http:
//schemas.openxmlformats.org/officeDocument/2006/relationsh-ips/worksheet"
Target="worksheets/sheet2.xml"/>
Type="http:
//schemas.openxmlformats.org/officeDocument/2006/relationsh-ips/worksheet"
Target="worksheets/sheet1.xml"/>
Type="http:
//schemas.openxmlformats.org/officeDocument/2006/relationsh-ips/sharedStrings"
Target="sharedStrings.xml"/>
Type="http:
//schemas.openxmlformats.org/officeDocument/2006/relationsh-ips/styles"
Target="styles.xml"/>
Type="http:
//schemas.openxmlformats.org/officeDocument/2006/relationsh-ips/theme"
Target="theme/theme1.xml"/>
在以上文件中,根据元素中r:
id属性的值可得到工作表数据的XML文件。
例如,在workbook.xml文件中名为工作表1的工作表的r:
id属性为rld1,在以上文件中根据ID找到以下代码:
Type="http:
//schemas.openxmlformats.org/officeDocument/2006/relationsh-ips/worksheet"
Target="worksheets/sheet1.xml"/>
由此可知工作表数据保存在worksheets文件夹下,文件名为sheet1.xml。
(6)打开“xl\worksheets\sheet1.xml”文件,其内容如下(为节省篇幅,以下代码中省略了重复的4~6行的数据):
xmlversion="1.0"encoding="UTF-8"standalone="yes"?
>
-//schemas.openxmlformats.org/spreadsheetml/2006/main"xmlns:
r="http:
//schemas.openxmlformats.org/officeDocument/2006/relationships">
B6"/>'工作表数据范围
-
-
-
-'工作表数据
-2">'第1行数据
-2"ht="14.25">'第2行数据
-'单元格A2的值,字符型
0'字符串的位置索引
-'单元格B2的值,字符型
1
-2">'第3行数据
-
2
-'单元格B3的值
3500'值为35000
(此处省略工作表第4~6行的数据)
-
B1"/>'合并单元格
footer="0.3"/>
以上XML代码中,元素表示该行中的一个单元格,对于单元格中的值,如果元素有“t”属性的话,元素的子元素的值就是各工作表共享的字符串的索引。
否则,元素的值就是该单元格的值。
(7)在工作簿中,各工作表使用的字符串统一存放在“xl/sharedStrings.xml”文件中,该文件的内容如下:
xmlversion="1.0"encoding="UTF-8"standalone="yes"?
>
-//schemas.openxmlformats.org/spreadsheetml/2006/main"count="6"uniqueCount="5">
-
商品名称
-
单价
-
三星手机
-
诺基亚手机
-
摩托罗拉手机
每组字符串使用元素表示,其排列顺序就是其序号,表示工作表数据的XML文件用该序号来引用字符串。
20.2RibbonX控件简介
在Excel2007中,提供了一千七百多个RibbonX控件。
不能使用VBA代码从功能区中添加或删除RibbonX控件,只能通过编写XML代码来完成定制RibbonX的工作,且必须将该XML代码包含到工作簿文件中,以达到定制RibbonX的目的。
使用XML代码可描述RibbonX,指定控件出现的位置、外观、激活时的动作等。
RibbonX通过回调过程与VBA进行接口,可以在VBA中编写回调过程,以使RibbonX中的控件完成不同的功能。
在本书第1章中介绍了RibbonX的基本组成,本节将从开发人员的角度介绍RibbonX的各种控件。
20.2.1基本控件
基本控件可以添加到自定义组中或者可以包含在其他容器控件中。
常用的基本控件有以下几种。
1.标签
标签控件如图20-4所示。
与用户窗体中的标签控件类似,RibbonX中的标签控件只作为文字提示信息使用,不响应用户的动作。
标签控件的XML标识为。
2.复选框
复选框如图20-4所示,可通过单击来切换状态,常用于控制一个UI控件是否可见。
复选框控件的XML标识为。
3.分隔条
分隔条如图20-4所示,用于提供组中控件可见的分隔垂直条。
分隔条控件的XML标识为。
图20-4标签、复选框和分隔条控件
4.按钮
按钮如图20-5所示,这是最普通的控件。
按钮可带有图标和标题,能接收用户的单击,并调用相应的VBA过程完成任务。
如本章前面的例子中,就为按钮指定了一个VBA代码。
按钮控件的XML标识为
5.切换按钮
切换按钮如图20-5所示,是一个可单击项,每次单击时在按下和非按下之间切换,常用于组中以切换多个可能状态其中之一的属性,该组中每次仅一个按钮能被按下。
切换按钮控件的XML标识为。
图20-5按钮和切换按钮
6.编辑框
编辑框如图20-6所示,可接受用户的输入。
编辑框控件的XML标识为。
7.下拉库列表
下拉库列表如图20-7所示,是由一个下拉控件和一组其他控件组成的。
库列表中可以包含不同类型的控件,是最灵活的UI控件之一。
图20-6编辑框图20-7下拉库列表
下拉库列表控件的XML标识为。
8.列表项
为包含在组合框中的列表项。
列表项控件的XML标识为- 。
20.2.2容器控件
容器控件可以包含其他控件,通过嵌套容器控件在其他容器里,可以创建层次结构。
常用的容器控件有以下几种。
1.选项卡
在Excel2007中,功能区被分为多个选项卡,例如【开始】、【插入】选项卡等。
选项卡的XML标识为。
2.组
每个选项卡中又分多个组,例如【开始】选项卡中的【字体】、【对齐方式】等组,各组中包含不同的控件。
组的XML标识为。
3.盒子控件
在功能区中,盒子控件没有任何外观,也就是说盒子控件不显示出来,主要用来控制其他按钮的布局。
在盒子控件中可以包含任何其他类型的控件。
如图20-8所示就是使用box控件将排序的三个按钮组合在一起。
盒子控件的XML标识为。
可将其他任意控件放在该容器内。
4.按钮组控件
按钮组控件用来控制其他控件的布局,在相关控件之间带有边框和分隔条,如图20-9所示。
图20-8盒子控件图20-9按钮组控件
按钮组控件的XML标识符为。
可将
5.复合框控件
复合框控件如图20-10所示,可以在该控件中输入内容,同时提供下拉列表供用户直接选择。
下拉列表的内容是一组列表项目(为一组- 控件)。
复合框控件的XML标识为。
6.菜单控件
功能区中的菜单控件是一种弹出式菜单,如图20-11所示。
其组成元素由RibbonX文件定义。
菜单可以包含按钮或其他菜单项,且允许创建层次菜单结构。
图20-10复合框控件图20-11菜单控件
菜单控件的XML标识为
在该容器中可以包含
7.分离按钮控件
分离按钮控件由一个组合按钮和菜单或者切换按钮和菜单组成,如图20-12所示。
单击按钮部分将执行默认的动作,而单击下拉箭头将显示相关选项并可进行选择。
分离按钮控件的XML标识为。
该容器可以包含
定义该控件的代码结构如下:
菜单内容
8.下拉控件
下拉控件如图20-13所示,该控件与复合框控件类似。
不同的是,在该容器中还可以包含
图20-12分离按钮控件图20-13下拉控件
下拉控件的XML标识为。
在该容器中可包含- 和
20.2.3控件属性
每个控件都具有很多的属性,可在XML中使用这些属性修改控件的外观。
下面列出控件的常用属性。
1.ID类属性
每个控件都必须有一个唯一的ID,由一个最多是1024个字符的字符串组成,ID属性分为以下3类:
❑id:
为自定义控件的ID;
❑idMso:
为内置控件的ID;
❑idQ:
为标记、和
2.外观属性
外观属性用来控制控件的可见性、标签、悬浮提示等信息,常用的有以下属性。
❑itemHeight:
设置gallery控件中库项目的高度,以像素为单位;
❑itemWidth:
设置gallery控件中库项目的宽度,以像素为单位;
❑itemSize:
设置menu中项目的尺寸;可设置为normal和large,大项目不但显示描述也显示标签;
❑label:
设置控件的标题;
❑screentip:
设置鼠标悬浮在控件上时显示的小提示;
❑supertip:
设置鼠标悬浮在控件上时显示的大提示;
❑showLabel:
设置是否显示控件标签,取值为True和false;
❑size:
设置控件的尺寸。
可设置为normal和large,控件正常尺寸(normal)占用一行,大尺寸(large)占用三行;
❑title:
设置菜单的标题文本,用于menu和menuSeparator控件;
❑visible:
设置控件是否可见,取值为True和false。
3.图像属性
带图像的控件可以使用自定义的图像,也可使用内置控件的图像。
主要有以下属性:
❑image:
使用此属性设置自定义图像的名称;
❑imageMso:
使用此属性设置内置控件的名称,用来引用内置控件的图像;
❑showImage:
设置是否显示一个控件的图像,取值为True和false。
4.其他属性
除了上面介绍的控制控件外观、图像的属性外,常用的属性还有以下几种:
❑boxStyle:
设置在box控件中是水平排列图标(默认)或垂直排列图标,取值为Horizontal或vertical;
❑columns:
设置gallery控件库中的列数;
❑description:
设置控件的长描述,当菜单的itemSize设置为大时显示在菜单中,用于botton、toggleButton、splitButton、checkBox、menu、dynamicMenu、gallery等控件;
❑enabled:
设置控件是否有效,如果设为false,则该控件为灰色,不能操作;
❑maxLength:
设置editBox或comboBox控件文字输入的最大长度;
❑keytip:
设置访问控件的快捷键;
❑rows:
设置gallery控件库中的行数;
❑showItemImage:
设置在comboBox、dropDown或gallery控件中,是否在下拉列表中显示图像;
❑tag:
为控件设置附加文本。
20.2.4控件回调函数
在自定义RibbonX时,可在XML中通过控件的不同属性设置控件。
但是,在更多的情况下,需要程序在运行时修改控件的属性。
这时,可使用控件的回调函数。
在RibbonX中提供了回调函数功能,可在运行时动态修改控件的属性。
每个控件可有多个回调函数,可分别动态修改控件的相应属性。
设置回调函数属性以get字符开头,紧跟着相应的属性名。
例如,要动态修改控件的label属性,则用属性getLabel设置回调函数。
使