VBA静态类“WithEvents”?

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

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

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

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

回答

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

VB_PredeclaredId属性设置为True手段编译器产生全局(或项目范围的,如果类是私有的),这是类模块本身的名字命名的实例。

换句话说,字面上有一个命名的对象/实例Class1(假设类模块被命名Class1),公开Class1模块定义的默认接口(即它是一个对象,其编译时类型Class1与该类可能正在实现的其他接口无关)。

所以没有实例化它,但 VBA 编译器会。

并且该对象的行为与您可能拥有的任何其他对象相同 - 没有理由Public Event不能在其中声明Seta ,并且您可以将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”?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>