前者は、簡単に利用できる手法である。プロパティに、マクロの名前を指定すればメニューが選択されたときに自動的に呼び出される。文字列による指定となるので、名前が重なる場合は困る。後者は、従来のようにイベントを受け取って処理する方法だ。後者の方法を使うほうが確実であり、無難である。どこでイベントを受け取るか。イベントを受け取るためには、クラスが必要だ。常時存在しているクラスが必要となる。実は、このような用途にうってつけのクラスがある。派生したクラスがあり、これはブック自体を表すクラスとなる。このクラスのインスタンスは常に存在するのだ。ブック自体のイベントを持つので、ブックやシートで起きたイベントを処理することもできる。イベントを拾ってみよう。イベントつきで宣言する。CommandBarButton定数を幾つか定義しておく。これらは後で利用する。イベントが発生するので、それにあわせてメニューを登録する。プロパティに一意のデータを登録しておき、メニューがすでに格納されているかどうか調べる。元に、メニュー項目の参照を探し当てることができる。同じ名前のメニューが無限増殖してしまう。それを避けるためのコードを入れたわけだ。イベントを受け取ることができる。MsgBox("エラーが発生しました。今のところは無視してかまわない。これらは、既定のボタンの処理を上書きする際に利用する。ハンドラさえ呼び出されれば後は同じだ。マクロを削除することを視野に入れておこう。最後の砦となるエラー処理コードも入れておく。基本的に、イベントハンドラではエラー処理は必須だ。問題が入ったブックを開く。メインメニューに登録されている。解答欄を選択し「ツール」⇒「ののぐらむ自動解答」と選ぶ。