使用Worksheet对象的.UsedRange重置Excel已用范围是否存在已知问题?
解决VBA中UsedRange重置的语法问题
当工作表实际已用范围和UsedRange属性返回的范围不一致时,理论上调用UsedRange可以触发VBA重新计算并重置这个范围,但要注意语法细节:
有效写法
直接使用内置的ActiveSheet对象时,单纯调用UsedRange就能生效:
ActiveSheet.UsedRange ' 可正常触发重置
无效写法
如果用自定义工作表变量,直接写变量.UsedRange会被VBA编译器判定为无意义语句,无法生效:
Dim My_Sheet as Worksheet Set My_Sheet = ActiveSheet My_Sheet.UsedRange ' VBA编译器报错,无法触发重置
修正方案
要让自定义变量的UsedRange触发重置,必须让代码“实际使用”这个属性,常见两种方式:
- 将
UsedRange赋值给一个临时变量(哪怕后续不用这个变量):
Dim My_Sheet as Worksheet Dim tempRng as Range Set My_Sheet = ActiveSheet Set tempRng = My_Sheet.UsedRange ' 触发重置
- 访问
UsedRange的子属性(比如Address),强制VBA计算这个范围:
Dim My_Sheet as Worksheet Set My_Sheet = ActiveSheet My_Sheet.UsedRange.Address ' 触发重置
本质上,只要让VBA执行到需要读取UsedRange具体信息的操作,就能触发它重新计算工作表的实际已用范围,解决两者不一致的问题。
内容的提问来源于stack exchange,提问作者Geoff_B
相关产品推荐
相关产品推荐

