在VBE中CommandBarEvents.Click和CommandBarButton.Click之间的区别是什么?

Thu*_*ame 5 vb6 events vba vbe vbide

VBAVB6外接对象模型(VBIDE)暴露CommandBarEvents有一个对象Click 的事件,而该事件的签名是:

Dim WithEvents CmdBarEvents As CommandBarEvents

Private Sub CmdBarEvents_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean)

并且CommandBarControl传递给a的引用以VBE.Events.CommandBarEvents注册该事件处理程序CommaneBarControl:

Set CmdBarEvents = Application.VBE.Events.CommandBarEvents(CmdBarItem)

办公室的对象模型定义有自己单独的命令栏控件Click 的事件,例如,CommandBarControl其中有一个对象Click的事件,而签名是:

Dim WithEvents CmdBarBtn As CommandBarButton

Private Sub CmdBarBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)

并且CommandBarButton对该WithEvents对象分配了对a的引用:

Set CmdBarButton = myButton

为什么会有差异,我应该选择哪个?

我将事件附加到VBE的CommandBars上的控件(而不是主机应用程序中的CommandBars).

Office CommandBars无权访问CommandBarEvents对象,因此我假设他们必须使用该CommandBarButton.Click事件.但是VBE(在任何Office主机下)都可以访问CommandBarButton事件和CommandBarEvents事件,所以我可以使用任何一种方法,尽管仅仅存在该CommandBarEvents对象表明它是首选方法(可能是非Office VBA主机中唯一的方法) ,以及向VBE CommandBars添加事件处理程序的大多数在线示例都可以使用CommandBarEvents.

MZ Tools的Carlos Quintero非常有用,但在这种情况下,他网站上的信息略显矛盾.他建议在旧的Microsoft Visual Basic 5.0/6.0环境中使用CommandBarEvents方法,但也使用CommandBarControl.Click页面上的方法

VBE是否有特殊之处并将事件附加到CommandBar控件上?如果我选择在CommandBarControl事件中使用事件,是否有任何问题(内存泄漏,IDTExtensibility2关闭问题等)CommandBarEvents

Car*_*ero 7

  • VB6是1998年的IDE(以及1997年的VB5)必须始终使用CommandBarEvents.他们使用的Office命令栏是从Office 97借来的,其CommandBarButton缺少Click事件.

  • Office 2000在CommandBarButton类中引入了Click事件,并且必须始终用于针对Office 2000及更高版本(或其他VBA主机)的VBA加载项,因为虽然CommandBarEvents显然可用,但Office 2010 64位不支持CommandBarEvents(如果使用它会崩溃).

  • Visual Studio是另一种具有自身奇点的动物.

  • 伙计,我想我现在欠你一杯啤酒. (2认同)