在Excel的VBA中,有一些属性可以在没有对象限定符的情况下使用 - 例如,如果我使用没有对象限定符的属性ActiveCell,就好像我在Application对象上使用它一样。如果我没有指定对象限定符,通常如何决定调用属性的对象?例如,我可以和我自己的班级做类似的事情吗?我可以在我自己的类中声明一个可以在没有对象限定符的情况下调用的属性吗?
答案 0 :(得分:2)
在VBA中,模块或类被视为从Application
继承,然后是它所附加的对象(userform
,worksheet
或ThisWorkbook
),然后本身。此外,如果程序名称是明确的,那么在使用它时通常不需要对其进行限定。
除非您的课程或模块还包含Application.ActiveCell
方法,否则您可以将ActiveCell
仅引用为ActiveCell
,在这种情况下,您需要使用{{1}对其进行限定}}
这也意味着,如果Application.
成为MyProc
的成员,则可以将其从另一个代码/模块文件引用为MyModule
,但如果您还有MyProc
在MyProc
中{1}},如果您输入MyOtherModule
,则会MyProc
如果它在MyModule.MyProc
中,则会调用MyModule
如果它在MyOtherModule.MyProc
中{1}},否则会引发错误,指出其含糊不清,这意味着您必须将其限定为MyOtherModule
或MyModule.MyProc
。
...然而
类模块定义类的内部工作方式,并且必须先实例化类,然后才能将其与MyOtherModule.MyProc
一起使用。类的属性是指类的特定实例,因此必须始终使用它引用的实例进行限定。即如果您的班级New
包含字符串属性MyClass
,则必须通过实例调用MyProperty
,例如:
MyProperty
甚至:
Set MyClassInstance = New MyClass
Debug.Print MyClassInstance.MyProperty()
避免输入类实例名称的唯一方法是声明Debug.Print (New MyClass).MyProperty()
块:
With