4

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

4

1 回答 1

2

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

您可以直接引用Application.ActiveCellActiveCell除非您的类或模块还包含一个ActiveCell方法,在这种情况下,您需要使用Application..

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

然而...

一个类模块定义了一个类的内部工作,一个类必须先实例化,然后才能与New. 类的属性引用类的特定实例,因此必须始终使用它所引用的实例来限定。即,如果您有一个MyClass带有字符串属性的类,则必须通过实例MyProperty调用,例如: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
于 2013-09-13T05:06:28.627 回答