gpt4 book ai didi

VBA静态类 "WithEvents"?

转载 作者:行者123 更新时间:2023-12-02 18:43:50 26 4
gpt4 key购买 nike

免责声明 - 我绝不是 VBA 专家;我是一名黑客。

但是,我有一些静态的类模块(使用Attribute VB_PredeclaredId = True)

我也想用它们定义一些自定义事件(Public Event Foo(ByVal Bar As Boolean);但是,由于我没有实例化该类,所以我没有找到任何当“PreDeclaredID”为 true 时,有关将包含“WithEvents”的任何“属性”的信息。

是的,我可以使用该类而不需要它是静态的;但是,如果可能的话,我更愿意找到一种自动声明它的方法 WithEvents

最佳答案

该类具有静态语义,但它不是您所指的静态意义上的静态。

VB_PredeclaredId 属性设置为 True 表示编译器生成一个以类模块本身命名的全局(或项目范围,如果该类是私有(private)的)实例.

换句话说,有一个名为 Class1 的对象/实例(假设类模块名为 Class1),公开默认值由 Class1 模块定义的接口(interface)(即,它是一个编译时类型为 Class1 的对象,无论该类可能实现什么其他接口(interface))。

所以并没有实例化它,而是 VBA 编译器实例化了它。

该对象的行为与您可能拥有的任何其他对象相同 - 没有理由不能在其中声明公共(public)事件,并且您可以设置 一个 WithEvents 对象变量到该“自由”全局实例,您可以从项目中的任何位置通过名称引用它:

Private WithEvents Thing As Class1 '<~ requires Public Event declaration in Class1.

Private Sub Class_Initialize()
Set Thing = Class1 '<~ will not compile unless Class1 has VB_PredeclaredId=True.
End Sub

关于VBA静态类 "WithEvents"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67707876/

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