兼容Excel2007和2003

目前阶段,Excel 2003和Excel 2007用户并存,编写代码时应该随时考虑代码的兼容性。

兼容性主要体现在三个方面:方法与属性的增减、工作表行列数差异、菜单与功能区模式

1.对象、方法与属性与函数的增减

在Excel 2007中,相对Excel 2003增加了很多对象、方法、属性及函数,如果代码中涉及这些属性,那么在低端用户系统中执行代码就一定出错。例如Excel 2007独有的色阶条件格式、SmartArt、工作表函数Sumifs等等。再如排序功能,Excel对它做了强化,可以添加3个以上的条件。如果需要体现程序的兼容性时应该使用3个以内的排序条件。

同时,Excel 2007相对于Excel 2003也精简掉部分功能,或者对原有功能进行了部分修正。例如FileSearch功能已删除,针对以上兼容性问题,编写代码时就尽量使用Excel 2003和2007都支持的对象、属性、方法或者函数。例如FileSearch不支持2007,但是Dir函数却是Excel 2007和Excel 2003通用,那么可以使用Dir取代FileSearch。

再如单元格的字符容量在Excel 2003和Excel 2007中也差异较大,此类情况应以最低端容量做为标准,才可以使程序有更好的兼容性。

2.工作表行列数差异

Excel 2003的最大行数为65536,最大列数为256;而Excel 2007的最大行数为1048576,最大列数为16384。那么在编写代码时引用最后一行或者最后一列时不能采用以下两种形式:

[A65536]——不适用于Excel 2007

[A1048576]——不适用于Excel 2003

甚至利用版本号来判断也是无法达到通用的,例如:

Range("A" & IIF(Application.Version = 12, 1048576, 65536))

以上代码引用A列最后一个单元格,虽然利用Version来判断版本号,对Excel 2007使用1048576,对Excel 2003使用65536,但仍然忽略了一个重点:Excel可以使用兼容模式。

而最精典的引用是:

Cells(Rows.Count, 1)——A列最后一个单元格

Cells(1, Columns.Count)——第一行最后一个单元格 Cells(1, Columns.Count).EntireColumn——最后一列 Range(Rows.Count & ":" & Rows.Count)——最后一行

3.菜单与功能区模式

Excel 2007采用新的功能区,与以往任何版本的Office软件菜单在外观上或者代码编写上都完全不同。

Excel 2003的CommandBars对象虽然被Excel 2007保留了下来,但其Position属性不再发生任何作用,即不管如何设置,自定义工具条都显示在功能区中,而不会像Excel 2003一样可以在屏幕上、下、左、右任意切换。

为了让程序的兼容性更好,尽量使用菜单,而非功能区或者工具条。