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

在Excel的VBA中,有一些属性可以在没有对象限定符的情况下使用 – 例如,如果我使用没有对象限定符的属性ActiveCell,就好像我在Application对象上使用它一样.如果我没有指定对象限定符,通常如何决定调用属性的对象?例如,我可以和我自己的班级做类似的事情吗?我可以在我自己的类中声明一个可以在没有对象限定符的情况下调用的属性吗? 最佳答案 在VBA中,模块或类被认为是从Application继承,然后是它所附加的对象(userform,worksheet或ThisWorkbook),然后是它自己.此外,如果过程名称是明确的,那么在使用它时通常不需要对其进行限定.

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

这也意味着如果你有MyProc作为MyModule的成员,你可以从另一个代码/模块文件中引用它作为MyProc,但如果你在MyOtherModule中也有MyProc,那么如果你输入MyProc,它会调用MyModule.MyProc如果它在MyModule中,或MyOtherModule.MyProc,如果它在MyOtherModule中,否则会引发一个错误,指出它是不明确的,这意味着你必须将它限定为MyModule.MyProc或MyOtherModule.MyProc.

然而…

类模块定义类的内部工作方式,并且必须先实例化类才能与New一起使用.类的属性引用类的特定实例,因此必须始终使用它引用的实例进行限定.即如果你有一个带有字符串属性MyProperty的MyClass类,你必须通过一个实例调用MyProperty,例如:

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

甚至:

Debug.Print (New MyClass).MyProperty()

避免键入类实例名称的唯一方法是声明With块:

Set MyClassInstance = New MyClass
With MyClassInstance 
    Debug.Print .MyProperty()
End With
点赞