Excel VBA中让你意想不到的陷阱

VBA代码由于简单实用 , 大家都很喜欢 , 但有些代码怎么看都没有问题 , 调试时却总是出错?
究竟是为什么呢 , 其实代码本身没有错 , 在正常情况下都没有问题 , 错在运行环境本身出了问题 , 下面举例予以说明:
【Excel VBA中让你意想不到的陷阱】1、微软在定义属性时 , 进行了长度限制
比如:区域的Address属性 , 虽然是字符串 , 却是定长字符串 , 不能超过256个字符 。
如果用它来获取单元格地址 , 只能获取前256个字符 。
(一般情况下不会出问题 , 但如果单元格区域是很零散的单元格区域 , 就可能出错)
2、VBA中属性解释与实际不符
比如:Cells.SpecialCells(xlCellTypeLastCell) , 微软帮助中:用于获取“已用区域中的最后一个单元格” , 但实际上是获取“已用区域中的最后一个可见单元格” , 
如果已用区域最后一个单元格正好被隐藏 , 就与该属性的定义产生偏差 , 导致代码达不到预期效果 。
3、兼容32位环境的限制
在VB环境中 , 长整型变量是long,最大支持 2,147,483,647 , 约21亿 , 似乎很大了 , 
在excel2000/2003没有问题 , 但在excel2007及以上版本中就可能出问题 , 
如果你执行这一句:MsgBox Cells.Count , 肯定会出错 , 因为现在支持1048576行*16384列 , 已经21亿 , 超过了长整型的限制 。
而且Rows.count*Columns.count也会出错 , 其原因也是一样 , 虽然单个都没有超上限 , 但结果超长整型上限也不行 。
4、VBA代码在VSTO中 , 由于环境变化 , 也会出现异常
比如:ActiveSheet.HPageBreaks.add , 在VBA、COM中都正常 , 在VSTO中会导致下一行内容丢失 。
因此 , 在编写代码时预先考虑到以上等情况 , 可以减少你调试的难度 , 避免走弯路 。

    猜你喜欢