VBA

ハイパーリンクからマクロを実行する方法【Excel VBA】

2019-10-27

ハイパーリンクを自動設定するようなマクロを組んでいると、ふと思いますよね。

ハイパーリンクからマクロ実行できれば、マクロ用のボタン要らないのでは?、とか

何らかのデータ一覧やファイル一覧を自動作成するマクロだと、任意の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

マクロを起動する実例(サンプルマクロ)

Excelを印刷・PDF化マクロを起動する例

https://reicode.info/print-excel-all-on-filelist/

モジュールを自動エクスポート/インポートするマクロを起動する例

https://reicode.info/module-auto-import-with-vba/

ハイパーリンクした時の警告を回避してファイルを開く例

https://reicode.info/open-file-from-hyperlink/

検証環境

Microsoft Office 2010および2016で検証しています。

おわりに

いかがだったでしょうか?

Worksheet_FollowHyperlinkの中身は自由に組むことができます。

ご自身のお好みに設定してみてください。

-VBA
-

© 2021 ReiCodeBlog