VBA中Range为何可以同时作为类和属性存在?
问题解答
核心结论
Cells属性和Range类完全不是同一概念,Range作为类和作为属性返回类型的两种身份不存在冲突。
概念区分
- Range是Excel VBA对象模型中定义的类,你可以把它理解为一套模板,所有代表单个单元格、多个单元格区域的对象,都是这个类的实例。
- Cells是Worksheet、Range等对象内置的属性,它的作用是返回一个Range类的实例,属性定义
Property Cells As Range的含义就是「调用Cells属性后,会得到一个Range类型的对象」,仅此而已。
为什么Range看起来能同时当类和属性存在?
这是VBA对象模型非常常见的设计,二者的作用域完全不重叠:
- 作为类的Range是类型定义,用来规定所有单元格对象拥有的属性、方法,本身不能直接被赋值或者操作,需要实例化后使用。
- 你以为的「Range作为属性」,本质是Worksheet、Range等对象的
Range属性,这个属性的作用是接收单元格地址参数,返回对应单元格区域的Range类实例,和作为类的Range只是同名,用途完全不同。
代码示例拆解
你用到的代码:Excel.Application.ActiveSheet.Range("A1").Value = 5
中文含义为:访问Excel应用程序的活动工作表中A1单元格的数值属性,将其赋值为5。
逐层拆解对象层级可以帮你进一步理清关系:
Excel.Application:返回Excel程序本身,是Application类的实例.ActiveSheet:Application对象的属性,返回当前处于激活状态的工作表,是Worksheet类的实例.Range("A1"):Worksheet对象的属性,接收A1作为地址参数后,返回A1单元格对应的Range类实例.Value:Range类实例的属性,赋值操作就是直接修改单元格的内容
内容的提问来源于stack exchange,提问作者Caze982
相关产品推荐
相关产品推荐

