ハイパーリンクを自動設定するようなマクロを組んでいると、ふと思いますよね。
ハイパーリンクからマクロ実行できれば、マクロ用のボタン要らないのでは?、とか
何らかのデータ一覧やファイル一覧を自動作成するマクロだと、任意の1レコードに対してマクロを実行したい、とか
今回は、サンプル事例をまじえつつ、説明していきたいと思います。
ハイパーリンクを設定する
マクロを起動するのであれば任意のファイルにハイパーリンクされると困るので、以下のように設定します。
With ThisWorkbook.ActiveSheet .Hyperlinks.Add Anchor:=.Cells(1, 1), Address:="", SubAddress:="", ScreenTip:="sample", TextToDisplay:="sample" End With
これで設定したセルをクリックするとHyperlinksイベントが発生します。
ちなみにHyperlinks.Addの引数は以下のような感じです。
- Anchor=ハイパーリンクを設定するセル
- Address=リンク先ファイル
- SubAddress=リンク先ファイル内の位置 例:A1セル等
- ScreenTip=マウスオーバーした際にでる「吹きだし」に表示する文字列
- TextToDisplay=アドレスの代わりにセルに表示する文字列
要するに、AddressとSubAddressには何も設定しないでください。
ハイパーリンクのクリックを検知する
さて、前述のハイパーリンクがクリックされた場合に呼び出される処理があります。Worksheet_FollowHyperlinkです。
以下のコードをハイパーリンクが設定されたシートモジュールに追加しましょう。
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 'この中にマクロを記載するか、マクロを呼び出す(Call) End Sub
引数のTargetがハイパーリンクを設定したセルになります。
なので、Target.ScreenTipとすると ScreenTipの内容が確認できたりします。
ハイパーリンクからマクロを起動する
では本題のハイパーリンクからマクロを起動してみましょう。
押さえておくべきポイントとしては、ハイパーリンクがクリックされたとき、ハイパーリンクが設定されていたセルがアクティブになるということです。
なのでTargetとしてもActiveCellとしても見れるということです。
Target のプロパティと、ActiveCellのプロパティと両方使うことができます。
何らかの一覧を作る際に、列方向にデータ追加していく方はいないと思います。
なのでマクロを起動する時は、クリックされたセルが何列目にあるかの判定を、何のマクロを起動したいかの判定に応用できます。
以下のような感じです。
Option Explicit Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) On Error GoTo Err_Exit Select Case ActiveCell.Column Case 6 MsgBox "Hello World!!" Call HelloWorld Case 7 MsgBox "Hello VBA!!" Call HelloVBA Case Else MsgBox "Not Macro!!" End Select Exit Sub Err_Exit: MsgBox "予期せぬエラー" & Err.Number, vbCritical, "エラー" End Sub
ちなみにThisWorkbookモジュールにもWorkbook_SheetFollowHyperlinkがあります。どのシートのハイパーリンクか判定が必要になりますが、起動マクロを一括で管理できます。
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) End Sub
マクロを起動する実例(サンプルマクロ)
関連記事モジュールを自動エクスポート/インポートするマクロを起動する例
関連記事ハイパーリンクした時の警告を回避してファイルを開く例
検証環境
Microsoft Office 2010および2016で検証しています。
おわりに
いかがだったでしょうか?
Worksheet_FollowHyperlinkの中身は自由に組むことができます。
ご自身のお好みに設定してみてください。