ExcelVBA 別Bookのイベントの取得の仕方

アドイン創るに当たって、WorkSheetやWorkBookのイベントを取得するにはWithEventsを使わなきゃいけないことを理解。
サンプルコードまんま打ち込んでたんで、今まで使っていながらも理解してませんでしたよ〜。


アドインならWorkBookに書けばそれぞれのシートに反映されるのかと思いきや、アドインってそういう扱いじゃないんですね。
設定の仕方とか「アドイン」という言葉から、Excel自体に機能を追加するのかと思いきや、実行のされ方は普通にそのBookを開いているのと同じっぽいです。
たとえばイベントの呼び出しでも、Worokbook_openだったら、ただ単にアドインに書いただけではExcelを起動したとき(=そのアドインを読み込んだ時)のみにしか呼ばれません。

これらを解決するのが「WithEvents」ステートメント
これは主にクラスモジュールで使うステートメントらしく、まずはクラスモジュールに

Public WithEvents App As Application

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    'すべてのBookのOpenに対して、ココが呼ばれます。
End Sub

として、

Private X As New EventClassModule

Private Sub Workbook_Open()
    Set X.App = Application
End Sub

とすれば全てのBookに対してイベントの取得ができます。
Cライクな言語を使ってきた者としては、「App_WorkbookOpen」というアンダーバーで繋げたサブルーチンの名称で判定しているのが、なんとも不思議な感覚……。