ExcelのVBA側では、セルに設定されているハイパーリンクをクリックされたことを掴むことができるイベント「FollowHyperlink」が用意されています。
このイベントを使うと、ハイパーリンクがクリックされたことをプログラム側で検知できるので、そこから実行したいマクロ(プロシージャ)をCallします。
一見難しいそうに思えるかもしれませんが、実はそれほど難しくありません。
問題というと少し意味が変わるかもしれませんが、このイベントではハイパーリンクをクリックするとリンク先が実行(開くなど)されてしまいます。
単純にマクロを実行(処理)したいだけの場合、この「リンク先実行」が不要だったりしますのでこの点を回避するようにします。
それでは実際に試してみたいと思います。
大まかには下記の準備が必要です。
1.セルにハイパーリンクを設定する
2.FollowHyperlinkイベントにプログラムを書き込み
ここではプログラムは関係なく、通常通りの操作で設定をしますが、一点注意があります。
それは参照先を自分自身にするということです。
上記ではハイパーリンクをクリックすると設定元である「A1」に飛ぶということになります。
もちろん参照先を実行しつつ、マクロを実行させたい場合は、もともと必要な参照先を入力してもOKです。
以降はこちら側の作業は不要となり、あとはプログラム側で勝手に判断させるイメージです。
次にFollowerlinkイベントにプログラムを記述します。
今回は予め標準モジュールに作成した「テスト1」をハイパーリンクで実行させます。
そして今度はThisWorkBookのモジュールから該当のイベントを指定します。
下記画像の矢印の流れにそっていけばイベントの枠組みが表示されます。
そこに次のように記述します。
ここでの注意点としては、この「Followerlink」はブック、シート単位で使えます。
今回はブックレベルでのFollowerlinkイベントを使っています(厳密には「SheetFollowHyperlink」となります)。
そのため、複数のシートにハイパーリンクを設定している場合でも対応ができます。
ただしハイパーリンクのセルの位置などによっては「どのシートのハイパーリンク」かを見る必要が出てくるので、このイベントの引数である「Sh」を使って対処する必要があります。