7

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 のコントロールにイベントをアタッチしています。

CommandBarEventsOffice 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が、このページのアプローチも使用しています。

CommandBarVBE とコントロールへのイベントの関連付けについて何か特別なことはありますか? CommandBarControlイベントではなくイベントを使用することを選択した場合、問題 (メモリ リーク、IDTExtensibility2 シャットダウンの問題など) はありCommandBarEventsますか?

4

1 に答える 1