|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 ggmmlol 于 2018-5-2 22:44 编辑
在编写Worksheet_SelectionChange代码时,为了使代码只在单选一个单元格时才能运行,通常会用到类似这样的代码:
- If Target.Count > 1 Then Exit Sub
复制代码 这个代码,在xls格式的工作薄中,是可以正常运行,没有一点问题的;
但如果在xlsm格式的工作薄中,很可能就出现如下图所示的“溢出”错误。这是因为,在xlsm等EXCEL2007工作薄中,当全选一个工作表时,Target.Count的值是1048576*16384,也就是2的34次方,而EXCEL自身能常规处理的最大值是2的32次方,由于超出其计算范围而产生“溢出”错误。
那么,如何避免这个错误而同样达到原来的效果呢?
——这里介绍一个很简单的技巧,用下面的这个代码来替代就可以了:
- If Target.Address Like "*[:,]*" Then Exit Sub
复制代码
原理分析:当选择的单元格的数量不是一个时,那么,一种可能是选择了一个连续的长方形单元格区域,另一种可能是选择了多个不连续的单元格区域。第一种情况下,则所选择的区域的地址中会包含“:”,而第二种情况下,则地址中会包含“,”。所以,只要所选择的单元格区域的地址中了包含“:”、“,”中的任意一个,就可以判定所选区域中的单元格个数是大于1的。
换句话说,“Target.Address Like "*[:,]*"” 是能充分等效于 “Target.Count > 1”的,而Target.Address的值是一个简短的字符串,不会出现超出EXCEL处理范围的情况。所以,这样一个小技巧,就可以解决前述的溢出错误了!
|
评分
-
8
查看全部评分
-
|