gpt4 book ai didi

vba - 使用不带对象限定符的属性

转载 作者:行者123 更新时间:2023-12-02 11:44:01 24 4
gpt4 key购买 nike

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

最佳答案

在 VBA 中,模块或类被认为继承自 Application,然后是它所附加的对象(用户表单工作表) code> 或 ThisWorkbook),然后是它本身。另外,如果过程名称明确,那么在使用它时通常不需要对其进行限定。

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

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

但是...

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

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

甚至:

Debug.Print (New MyClass).MyProperty()

避免输入类实例名称的唯一方法是声明一个 With block :

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

关于vba - 使用不带对象限定符的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18777952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com