Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3124|回复: 3

[VBA] 019-程序的兼容性体现-疑难千寻千解丛书(VBA)

[复制链接]
发表于 2011-2-5 11:55 | 显示全部楼层 |阅读模式
ET疑难千寻千解丛书之EXCEL2010编程与实践
罗刚君 章兰新 黄朝阳 编著

疑难19
程序的兼容性体现在哪些方面
如果编写自定义函数或者开发的插件发送给不确定用户使用,且不能限制其使用指定的Office版本和Windows版本,那么就一定存在代码兼容性问题。通常兼容性问题体现在哪些方面呢?
è解决方案
操作系统不同、Office版本不同将带来兼容性问题,不同用户处理的对象不同,例如图形对象个数不同、单元格区域大小不同等,在使用相同代码处理不同对象时也一定会产生兼容性问题。本例从三方面进行分析。
í操作方法
操作系统对VBA的影响
不同操作系统对VBA是有影响的。例如Windows 2000XP7API函数有部分不同;由于桌面主题不同造成对所有窗口的宽度也不同,那么设计需要严格计算边距与高度的窗体时就会产生偏差;部分程序的参数也不同,例如Windows 2000DOS命令的“CD”命令不支持“CD/D”这个参数,而XP开始,以后的各种操作系统都支持;最后是Windows中一些默认程序也有变化。例如Windows 2000XP都有“Outlook Express”,而VistaWindows 7中删除了该程序,所以操作系统的版本也对VBA调用邮件程序有着极大的影响。
如果需要在执行主体程序前判断当前操作系统的版本,以当前常用的四大操作系统Windows 2000XPVista7为例,判断操作系统的方式如下:

  1. Sub 当前系统()
  2. MsgBox WorksheetFunction.HLookup(Split(Application.OperatingSystem, " ")
  3. (UBound(Split(Application.OperatingSystem, " "))), [{"5.0","5.01","6.0","6.01";"WIN 2000","WIN XP","VISTA","WIN7"}], 2, 0)
  4. End Sub
复制代码
执行程序后,将在对话框中告知当前操作系统版本名称。Windows 2000XPVista7的版本号分别对应5.05.016.06.01
而对于Office版本不同带来的兼容性问题则远远多于Windows版本带来的兼容性问题。例如:
工作表函数不同:每次版本更新都会加入新的函数。当VBA中使用该函数后,程序在低版本中就无法运行。
单元格行列数不同Excel 2007以前的版本有65536´256列,而Excel 200720101048576´16384列。调用单元格时会产生兼容性问题。
VBA中的对象有增减:例如Excel 2007开始增加了图标集、色阶条件格式,VBA中也相应地增加对象和方法。那么调用这些新对象的代码在2007以前的版本一定会出错;而Excel 2003所具备的FileSearch属性也从Excel 2007版开始删除了,通常在新版中利用DIR方法来替代FileSearch进行文件搜索。
对部分内置方法进行修改、完善:例如Excel 2007开始对早期版本的排序Sort做了修改,新版的Sort和早期版本完全不兼容;对于定义名称Name也有不同的处理方式,从Excel 2007开始可以对名称添加备注,而早期版本无此属性。
颜色不同Excel 2003的单个工作簿可以使用的颜色数量是56种(索引颜色),而Excel 2007开始采用43亿种(32位真彩色)。对颜色的处理,在Excel 2003中通常采用ColorIndex,而鉴于ColorIndex本身的限制,它无法准确地体现Excel 2007的颜色值,所以为了体现兼容属性,通常改用Color。例如获取单元格的颜色编码,那么必须使用以下代码才具有兼容性:
MsgBox ActiveCell.Interior.Color
除了以上版本差异带来的兼容性问题外,不同用户在同一版本中使用同一程序时也会有兼容性问题。因为不同用户制表时会有不同习惯,标题行数不同,或者待汇总的工作表数量不同、路径不同等,那么在开发工具时,为了体现兼容性,通常不使用硬编码,而用动态引用方式,使代码可以适应变化。
例如多表汇总,虽然工作表名称是“Sheet1”、“Sheet2”、“Sheet3”,但仍然不使用“Sheet1”方式引用工作表,而是“Sheets(1)”,即通过索引号调用工作表,避免改名后程序出错;而对于单元格的引用也不使用“[A1:c20]”这种硬编码,而是“ActiveSheet.Usedrange”实现动态调用,适应数据的增减变化。对于文件路径,也不能使用“d:\生产表”这种明文方式,而是调用对话框让用户自由选择,从而大大提升程序的兼容性,保证在不同环境下都可以正确执行。

=============================
上摘自《EXCEL2010编程与实践》

评分

参与人数 1 +5 收起 理由
开辆小富康 + 5

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2011-2-5 11:55 | 显示全部楼层
回复

使用道具 举报

发表于 2011-2-5 13:38 | 显示全部楼层
不错,最好的方式多熟悉各版本的差异,尽量避免个别版本出现的对象和属性,程序编写前咨询用户使用哪种版本,编好程序后多环境测试.
对于行列的调用,完全可以兼容.如2003版,经常用  range("a65536").end      有了高版本,可用range("a" & rows.count).end

点评

range("a" & rows.count).end,高!  发表于 2011-2-6 14:28
回复

使用道具 举报

发表于 2011-4-9 21:24 | 显示全部楼层
{:011:}{:011:}{:011:}{:011:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-18 20:52 , Processed in 0.230205 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表