在过去的几天里,我一直在尝试解决 VBA 中缺乏继承的问题,当WithEvents
在 VBA 类模块中使用 MSForms 对象时,可以允许将多个事件处理程序分配给用户窗体中的一系列控件。我主要关注_Enter
和_Exit
事件,这些事件在我的控件所在的MSForms.Control
而不是(从属)MSForms.TextBox
。因此,将每个 TextBox 添加到类模块中的 tbTextBox 变量中,如下所示:
Private WithEvents tbTextBox as MSForms.TextBox
Private Sub tbTextBox_Exit()
' Do Something Here - doesn't work
End Sub
Private Sub tbTextBox_DblClick()
' Do Something Here - works
End Sub
不适用于 Exit(在 MSForms.Control 中),尽管 DblClick 工作正常(在 MSForms.TextBox 中)。
我或多或少处于这样的地步,因为我知道这些事件确实会引发(仅在父级别),我想通过 Win32 API 连接到我的表单中的控件,并手动监视任何这些事件发生,然后引发我自己的事件来重新实现我自己的功能。
到目前为止,我从谷歌那里画了一个空白,但我认为一些更高级的 VBA 编码器比我能指出我正确的方向。还应该注意,我正在使用 Excel 2003,所以 VB.Net 不是一个选项,而且环境是高度沙盒的,所以不能使用外部模块或 .dll。