如何在后台实施事件?

时间:2019-07-04 09:30:24

标签: vba events com

当我上课听这样的其他事件时

Private WithEvents myClass As eventEmitter

Private Sub myClass_myEvent()
    '[...Handle Event]
End Sub

,然后在myClass

Public Event myEvent

Sub DoStuff()
    RaiseEvent myEvent
End Sub

要使VBA将RaiseEvent语句转换为对myClass_myEvent事件处理程序的调用,VBA会采取什么步骤?需要做些什么?


我从内到外都知道如何在VBA中处理和引发事件,但是我仍然不确定它们到底是什么以及它们如何工作。

我已经阅读了关于IDispatch的点点滴滴,我尝试研究了VB.Net的处理方式,因此我可以看到VBA中使用的整个ObjectType_EventName()处理程序语法正在隐藏很多。

我猜想在幕后,事件的工作方式可能与message queues类似(除了对象而不是窗口),因为事件似乎以相同的方式建立。但是,也许它们更像常规的调用栈-事件知道其侦听什么,并将函数调用放在与那些侦听器对象关联的调用栈上。只有类可以引发和处理VBA中的事件这一事实向我表明,与解释事件相关的某些内存/接口必须存在于所有VBA对象上,因此可能与VBA的COM实现有关

但这差不多可以解决我的问题,而且我对这些主题还不够熟悉,无法为自己更多地使用Google,因此问题仍然存在:Events如何在后台运行?

0 个答案:

没有答案