为何仅选中单个单元格时“ActiveCell Is Selection”结果为False
问题解答:单个单元格选中时
ActiveCell Is Selection返回False的原因 核心原因
- VBA中的
Is运算符作用是比较两个对象变量是否指向内存中的同一个对象实例,而非比较两个对象指向的内容/单元格位置是否相同。 - 即便当前仅选中单个单元格,
ActiveCell和Selection是分别调用Excel对象模型的两个独立属性返回的结果,每次调用属性都会生成新的Range对象实例,两个实例的内存地址不一致,因此Is判断返回False。 - 特殊场景补充:如果当前选中的不是单元格对象(比如选中了工作表内的形状、图表、控件等元素),此时
Selection返回的是对应类型的非Range对象,和属于Range类型的ActiveCell类型都不匹配,Is判断自然返回False。
正确的判断方式
如果要验证当前选中区域仅为单个单元格、且该单元格就是激活单元格,应该用地址比较的方式实现:
' 先判断选中区域是单元格,且仅包含1个单元格,再比较地址 If TypeName(Selection) = "Range" And Selection.Count = 1 And ActiveCell.Address = Selection.Address Then ' 符合判断条件的后续逻辑 End If
内容的提问来源于stack exchange,提问作者Uno Buscando
相关产品推荐
相关产品推荐

