`
参与
Excel VBA中让你意想不到的陷阱
其他        编号:182        日期:2016/10/22 21:27:54         作者:土豪
阅读:0

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

时间:2013-09-03 00:41来源:Office教程学习网 www.office68.com编辑:麦田守望者

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中会导致下一行内容丢失。

因此,在编写代码时预先考虑到以上等情况,可以减少你调试的难度,避免走弯路。