使用没有对象限定符的属性

时间:2013-09-13 03:45:37

标签: vba excel-vba excel

在Excel的VBA中,有一些属性可以在没有对象限定符的情况下使用 - 例如,如果我使用没有对象限定符的属性ActiveCell,就好像我在Application对象上使用它一样。如果我没有指定对象限定符,通常如何决定调用属性的对象?例如,我可以和我自己的班级做类似的事情吗?我可以在我自己的类中声明一个可以在没有对象限定符的情况下调用的属性吗?

1 个答案:

答案 0 :(得分:2)

在VBA中,模块或类被视为从Application继承,然后是它所附加的对象(userformworksheetThisWorkbook ),然后本身。此外,如果程序名称是明确的,那么在使用它时通常不需要对其进行限定。

除非您的课程或模块还包含Application.ActiveCell方法,否则您可以将ActiveCell仅引用为ActiveCell,在这种情况下,您需要使用{{1}对其进行限定}}

这也意味着,如果Application.成为MyProc的成员,则可以将其从另一个代码/模块文件引用为MyModule,但如果您还有MyProcMyProc中{1}},如果您输入MyOtherModule,则会MyProc如果它在MyModule.MyProc中,则会调用MyModule如果它在MyOtherModule.MyProc中{1}},否则会引发错误,指出其含糊不清,这意味着您必须将其限定为MyOtherModuleMyModule.MyProc

...然而

类模块定义类的内部工作方式,并且必须先实例化类,然后才能将其与MyOtherModule.MyProc一起使用。类的属性是指类的特定实例,因此必须始终使用它引用的实例进行限定。即如果您的班级New包含字符串属性MyClass,则必须通过实例调用MyProperty,例如:

MyProperty

甚至:

Set MyClassInstance = New MyClass
Debug.Print MyClassInstance.MyProperty()

避免输入类实例名称的唯一方法是声明Debug.Print (New MyClass).MyProperty() 块:

With