Thu*_*ame 5 vb6 events vba vbe vbide
在VBA和VB6外接对象模型(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?
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是另一种具有自身奇点的动物.
| 归档时间: |
|
| 查看次数: |
465 次 |
| 最近记录: |