VBAおよびVB6アドイン オブジェクト モデル (VBIDE)は、イベントCommandBarEvents
を持つオブジェクトを公開します。イベント シグネチャは次のとおりです。Click
Dim WithEvents CmdBarEvents As CommandBarEvents Private Sub CmdBarEvents_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean)
そして、 a への参照CommandBarControl
が渡されVBE.Events.CommandBarEvents
て、そのイベント ハンドラーが登録されCommaneBarControl
ます。
Set CmdBarEvents = Application.VBE.Events.CommandBarEvents(CmdBarItem)
Officeオブジェクト モデルは、独自のClick
イベントを持つ個々の CommandBar コントロールを定義します。たとえば、イベントCommandBarControl
を持つオブジェクトClick
のシグネチャは次のとおりです。
Dim WithEvents CmdBarBtn As CommandBarButton Private Sub CmdBarBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
a への参照がオブジェクトCommandBarButton
に割り当てられます。WithEvents
Set CmdBarButton = myButton
違いがあるのはなぜですか? どちらを優先する必要がありますか?
(ホスト アプリケーション内の CommandBars とは対照的に) VBE の CommandBars のコントロールにイベントをアタッチしています。
CommandBarEvents
Office CommandBars はオブジェクトにアクセスできないため、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
が、このページのアプローチも使用しています。
CommandBar
VBE とコントロールへのイベントの関連付けについて何か特別なことはありますか? CommandBarControl
イベントではなくイベントを使用することを選択した場合、問題 (メモリ リーク、IDTExtensibility2 シャットダウンの問題など) はありCommandBarEvents
ますか?