的VBA和VB6外接對象模型(VBIDE)暴露CommandBarEvents
對象中具有一個Click
event,並且事件簽名是:VBE中的CommandBarEvents.Click和CommandBarButton.Click有什麼區別?
Dim WithEvents CmdBarEvents As CommandBarEvents
Private Sub CmdBarEvents_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean)
並將對CommandBarControl
的引用傳遞給VBE.Events.CommandBarEvents
註冊爲該CommaneBarControl
事件處理程序:
Set CmdBarEvents = Application.VBE.Events.CommandBarEvents(CmdBarItem)
的辦公室對象模型定義了有自己Click
events,例如,CommandBarControl
對象具有Click
個別命令欄控制事件,簽名是:
Dim WithEvents CmdBarBtn As CommandBarButton
Private Sub CmdBarBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
而且到CommandBarButton
參考分配給WithEvents
對象:
Set CmdBarButton = myButton
爲什麼會出現差異,這是我應該更喜歡?
我將事件附加到VBE CommandBars上的控件(而不是主機應用程序中的CommandBars)。
Office CommandBars無權訪問CommandBarEvents
對象,所以我假設他們必須使用CommandBarButton.Click
事件。但VBE(在任何Office主機下)都可以訪問事件和CommandBarEvents
事件,所以我可以使用這兩種方法,但僅存在CommandBarEvents
對象表明它是首選方法(也可能是唯一的非唯一方法-Office VBA主機)和大多數的在線examples向VBE CommandBars添加事件處理程序做使用CommandBarEvents
。
MZ工具的Carlos Quintero非常有用,但在這種情況下,他的網站上的信息有點矛盾。他建議The CommandBarEvents approach was used in the old Microsoft Visual Basic 5.0/6.0 environment,但也使用CommandBarControl.Click
方法在這page
是否有什麼特別的VBE和附加事件到CommandBar
控制?如果我選擇在CommandBarEvents
事件上使用CommandBarControl
事件,是否有任何問題(內存泄漏,IDTExtensibility2關機問題等)?
男人,我覺得我欠你一杯啤酒。 –