在 Excel 的 VBA 中,有一些属性可以在没有对象限定符的情况下使用 - 例如,如果我在没有对象限定符的情况下使用属性 ActiveCell,就好像我在 Application 对象上使用它一样。如果我没有指定对象限定符,通常如何决定调用哪个对象的属性?例如,我可以对自己的班级做类似的事情吗?我可以在自己的类中声明一个可以在没有对象限定符的情况下调用的属性吗?
1 回答
在 VBA 中,模块或类被认为是继承自Application
,然后是它所附加的对象(a userform
、worksheet
或ThisWorkbook
),然后是自身。此外,如果过程名称是明确的,那么在使用它时通常不需要限定它。
您可以直接引用Application.ActiveCell
,ActiveCell
除非您的类或模块还包含一个ActiveCell
方法,在这种情况下,您需要使用Application.
.
这也意味着,如果您MyProc
作为 的成员MyModule
,您可以从另一个代码/模块文件中引用它MyProc
,但如果您也有MyProc
in MyOtherModule
,那么如果您键入,如果它在,MyProc
它将调用,或者如果它是in ,否则会引发错误,指出它不明确,这意味着您必须将其限定为or 。MyModule.MyProc
MyModule
MyOtherModule.MyProc
MyOtherModule
MyModule.MyProc
MyOtherModule.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