VBA静态类 "WithEvents"?

标签 vba events static

免责声明 - 我绝不是 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/

相关文章:

vba - 在 Excel 宏中按索引号复制并粘贴行

c - 在函数中静态标识的数组

c - 如何在C中的结构体中创建静态变量

android - 在应用程序类中绑定(bind) Android 服务是个好主意吗?

excel - “Unable to set the Width property of the Range class”

excel - "Object doesn' t 支持此操作"用于 Excel 2011 (Mac OS X) 中的下拉菜单

sql - Excel VBA - 使用可信连接连接到 sql(无 uid/pwd)

events - d3.js - 转换中断事件?

jQuery对象禁用事件监听器,如何检测html属性何时发生变化

javascript - Jquery 后期绑定(bind)使用 on - 旧表单不起作用?