VBA VB6 加载项对象模型(VBIDE)公开了一个具有CommandBarEvents eventClick对象,事件签名为:



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



Office 对象模型定义了具有自己的Click events的单个CommandBar控件,例如,具有CommandBarControl事件的Click对象,其签名为:



并将对CommandBarButton的引用分配给WithEvents对象:



为什么会有区别,我应该选择哪一个?

我将事件附加到VBE的CommandBar(相对于主机应用程序中的CommandBar)上的控件上。

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

MZ Tools的Carlos Quintero非常有用,但是在这种情况下,他网站上的信息有些矛盾。他建议使用The CommandBarEvents approach was used in the old Microsoft Visual Basic 5.0 / 6.0 environment,但也要在此page上使用CommandBarControl.Click方法

VBE和将事件附加到CommandBar控件有什么特别之处吗?如果我选择使用CommandBarControl事件而不是CommandBarEvents事件,是否有任何问题(内存泄漏,IDTExtensibility2关闭问题等)?

最佳答案

  • VB6作为1998年的IDE(和1997年的VB5)必须始终使用CommandBarEvents。他们使用的Office命令栏是从Office 97借用的,而Office 97的CommandBarButton缺少Click事件。
  • Office 2000在CommandBarButton类中引入了Click事件,并且必须始终用于定位Office 2000及更高版本(或其他VBA主机)的VBA加载项,因为尽管CommandBarEvents显然可用,但64位Office 2010却没有支持CommandBarEvents(如果使用,则会崩溃)。
  • Visual Studio是另一种具有自身奇点的动物。
  • 09-26 23:12