VBA

【Excel VBA】ハイパーリンクの警告を非表示にして開く方法

2019-10-19

Excel上にファイル一覧作ったはいいけど、中身を確認するのにいちいちエクスプローラーに戻って探してダブルクリックするのはナンセンスですよね。

そのままExcel上からリンクしたほうが便利に決まってます。

じゃあハイパーリンクでって話になるんですが

普通にハイパーリンクすると警告がでるように設定されており非常に邪魔なんですよね。そこは、Wscript.Shellで対応します。

というわけでファイル一覧を作成し、その結果からファイルを選択し既定のプログラムで開きたいと思います。

ファイル一覧の作成

FileSystemobject、Dirコマンド等でフォルダ内を検索しファイル一覧を作成します。

詳しいことは以下の記事で解説しております。

雛形となるサンプルプログラムもダウンロード可能です。

ファイル一覧作るの面倒だな、という方は是非ご利用ください。

関連記事サブフォルダ含むファイル一覧を高速に取得・作成【Excel VBA】

ハイパーリンクを設定する

ハイパーリンクを設定するときは、普通に設定するのではなく以下のようにします。

With ThisWorkbook.ActiveSheet
  .Hyperlinks.Add Anchor:=.Cells(1, 1), Address:="", SubAddress:="", ScreenTip:="C:sample.txt", TextToDisplay:="ファイル開く"
End With

これを設定しただけでは、アドレスを設定していないのでどこにもリンクできませんが、Hyperlinksイベントは発生します。

 

ハイパーリンクのクリックを検知する

さて、前述のハイパーリンクがクリックされた場合に呼び出される処理があります。

Worksheet_FollowHyperlinkです。

ここに、処理を記述することでファイルを開く等が可能となります。

追加方法は、開発タブ>Visual Basic(コード)でVBAProjectを開き

左側のプロジェクトエクスプローラーからMicrosoft Excel Objects>任意のシートをダブルクリック

ソースコード上側のプルダウンから(General)をWorkSheetに変更し、右のプルダウンから Worksheet_FollowHyperlink を選択します。

すると以下のようになります。

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

End Sub

ThisWorkbookにも Workbook_SheetFollowHyperlinkがあるのですが、どのシートのハイパーリンクか判定が必要になります。

 

既定のプログラムでファイルを開く

先ほどのモジュールに処理を記述していきます。

ハイパーリンクがクリックされたとき、ハイパーリンクが設定されていたセルがActiveになります。そのセルが Workbook_SheetFollowHyperlink の引数であるTargetになります。

処理としては、アクティブセルの列を判定し、特定列だった場合にWscript.Shell のRunメソッドでファイルを開きます。

この例ではハイパーリンク設定時に指定したScreenTip経由でフルパスを渡しています。※直接セル上のフルパスを読み取るようにしてもいいです。

フォルダやファイル名にスペースが含まれているとエラーになってしまうので、しっかりダブルクォーテーション=Chr(34)で囲みます。

Option Explicit
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
  On Error GoTo Err_Exit
  
  Select Case ActiveCell.Column
    Case 6
      With New IWshRuntimeLibrary.WshShell
        .Run Chr(34) & Target.ScreenTip & Chr(34), 4, False
      End With
    Case Else
  End Select
  
  Exit Sub
Err_Exit:
  MsgBox "予期せぬエラー" & Err.Number, vbCritical, "エラー"
End Sub

 

画面のイメージ画像です。ハイパーリンクはF列(6列目)に設定されています。

 

 

参照設定

使用する場合は、以下の参照設定が必要です。参照設定したくない!?という方はCreateObjectで対応ください。

1)Microsoft Scripting Runtime

2)Windows Script Host Object Model

 

 

検証環境

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

ダウンロード

設定済みのサンプルプログラムは以下からダウンロード可能です。

※ 本ファイルを利用して発生したいかなる損害について、 著作者はその結果について一切の責任を負わないものとします。

-VBA
-

© 2021 ReiCodeBlog