[VBA]ハイパーリンクからVBAを実行する


VBAを実行させるシートにハイパーリンクを作成し、同じシートに下記のVBAを作成する。
但しハイパーリンクの設定に注意が必要。
  • リンク先は、リンクを作成した自分自身を指しておくこと
  (セルA1にリンクを書いたなら、リンク先はA1。B5ならB5へリンク先を設定)
  • ハイパーリンクのヒント設定(ScreenTip)を設定しておくこと

リンク先を自分自身にする理由は「With」ステートメントにある。
Withステートメントはハイパーリンクの設定値を読み込むためのものなので
リンク先を他のセルやシート先にしておくと別のところの設定値を読み込むことになり
エラーになってしまう。

ハイパーリンクにヒント設定を行うのは、下記の場合だとselect文で
条件分けできるようにするためだ。
リンクAをクリックすればプロシージャAが、
リンクBをクリックすればプロシージャBが動くようにしておけば
いちいち図形にVBAプロシージャーを割り当てて設置する必要が無くなる。

リンクから実行させるメリットは、もう今やウェブでリンクを押せば
何かが実行されるということは周知されているので瞬間で理解できることだ。
デメリットは気楽にリンクをクリックしてしまって誤操作を引き起こしやすいこと。
途中にYesNoダイアログを出して操作を中断できるようにすればいいのではあるが。

ハイパーリンクの設定さえ間違いがなければ正常に動作する。
はずなのだが毎度MSの闇仕様が考えられるので、できれば実行するプロシージャーは
クラス化しておいたほうがいいかもしれない。
call myclass.myproc
としておけば誤動作を少しでも和らげられるかなあ?でもあまり意味無いよねって
思うけれども




(シート側)
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
 Dim cell As Range
 Dim selectCELL As String
 Dim hints As String
 
 With ActiveCell
   hints = .Hyperlinks(1).ScreenTip
 End With
 
 Select Case hints
   Case "Link1_hint"
     Call clickVbaRunA
   Case "Link2_hint"
     Call clickVbaRunB
   Case "Link3_hint"
     Call clickVbaRunC
   Case Else
     MsgBox "該当外"
     Exit Sub
 End Select
End Sub
}

(標準モジュール)
Sub clickVbaRunA()
 MsgBox "click VBA RUN A", vbYesNoCancel
End Sub
最終更新:2016年10月24日 15:01