ハイパーリンク画像を指定のソフトで開く

シート内のハイパーリンク画像(取得した画像のパス)をIE以外の指定ソフトで開くVBA。

Excelのハイパーリンクで開く画像ファイル(jpeg、png、tiffなど)は必ずIEとなる。Windows上で「既定のプログラムの設定」をし、ファイルの関連付けをしても結果は同じであったため、Microsoftの都合的なところだろうと思う。業務の都合上、どうしてもExcelのハイパーリンクをPhotoShopで開きたいと思ったので作ってみた。

 

 


ExcelのフルパスをWindows指定ソフトで開く

 

まず「ハイパーリンク」という考えでは無く、セルに入力(文字列として)されたパスをダブルクリックした際に、その値のファイルを指定プログラム(Windows上での既定のプログラム)で開くようにするVBAとなる。

標準モジュールではなく、シートのObjectsコードを記述する。

 

Private Sub Sample_OOOO(ByVal Target As Range, Cancel As Boolean)
当該するワークシートにPrivate Subを記述する

Dim Flp As String ‘変数Flp(ダブルクリックしたセルの値)
Flp = Target.Value
Dim WSH
Set WSH = CreateObject(“Wscript.Shell”)
WSH.Run Flp
Set WSH = Nothing
Cancel = True
End Sub

 

IE以外の「他プログラムを参照する」ということから、Wscript.ShellのRunメソッドを使用すればいいという結論。上記がコードになるわけだが、Runメソッドに指定するファイル名には「空白を含まない」というルールがあるようで、ファイル名に空白が含まれているとRunメソッドは空白までがファイル名であると認識してしまうらしいことが判明。

実際上記のコードで動かしてみると、パスの途中に半角スペース等の空白がある場合、【実行時エラー’ -2147024894(80070002)’ Runメソッドは失敗しました】等のエラーが出現し、ほとんどのファイルが開かないという結果になった。

そこで、変数の値をコーテーションで囲むChr(34)のコードを付け加え、
WSH.Run Chr(34) & Flp & Chr(34)
に変更。(””” & Flp & “””でも可)

さらに、シートの全体に適用してしまうと関係の無い値の入ったセルをダブルクリックした時まで動いてしまうということから、こちらのプログラムを動かすシート上の範囲を指定。

If Intersect(Target, Range(“指定した範囲”)) Is Nothing Then
Else
End If

上記の変更を加えた事により、開きたいパスをダブルクリックすることでPhotoshop(.jpg .tiff 等の拡張子をWindows上の既定のプログラムでPhotoshopに設定したので)で開けるようになった。

※別記事内のDir関数でファイル名とフルパスを取得するVBA(Dir関数を使用したファイルの取得)で、フォルダを取得してファイル一覧を書き出すコードの中にハイパーリンクを設定するコードを記述してあったが、そちらのコードをそのまま外せば今回のコードが活きる。ハイパーリンクでOKであればそのままで。

 

 


コピペ用サンプルコード

 

Private Sub Sample_xxxx(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range(“指定した範囲”)) Is Nothing Then
Exit Sub
Else
Dim Flp As String
Flp = Target.Value
Dim WSH
Set WSH = CreateObject(“Wscript.Shell”)
WSH.Run Chr(34) & Flp & Chr(34)
Set WSH = Nothing
Cancel = True
End If
End Sub