category name  »  page title date

ファイルのフルパスを表示する

現在対象となっているファイル名などを表示するのに、フルパス名で表示すると長すぎて表示エリアに収まらない、ということがよくあります。しかし、ファイル名だけでなく、パス名も知りたい。
このために、こうしたらどうかというアイデアがふたつあります。
ひとつは、長すぎるフルパス名の途中を省略して、表示エリアに収まる長さにする、という方法です。たとえば

G:\WorkDesk\WorkDesk\030.HP\CAST FACTORY\VBA-tips.xlsm
            ↓
G:\WorkDesk\Work…TORY\VBA-tips.xlsm

といった具合です。これは、比較的簡単に実現できますが(「長い文字列を省略する」を参照)、全体がわからないのが、少し気持ち悪いですね。ただし、フルパス名が知りたいのは、そのファイルがハードディスク上にあるのか、USBメモリ上にあるのかがわかればよい、という程度のことであれば、これで十分という場合もあります。 ふたつめの方法は、通常はファイル名だけ表示していて、必要なときにフルパス名をきちんと表示してくれる、というものです。フルパス名の表示はその瞬間だけでよいので、画面を乱さないように、メッセージボックスか専用のユーザーフォームに表示させます。

後者の方法でやってみました。
ワークシート上に "FileName" という名前のセルを用意しておきます。そこにファイル名が表示されていて、そこをクリックすると、メッセージボックスにフルパス名が表示される、という簡単なものです。いろいろと拡張の余地はあると思いますが、とりあえず。
SelectionChange イベントは、同じセルを続けてクリックしても当然発生しないので、自然な感覚にあうよう、一度クリックすると "A1" に選択が移動するようにしてあります。動作が目立たなくするため、ワークシートの1行目1列目のそれぞれの高さ、幅は0にしておきます。

ワークシート

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Intersect(Target, ActiveSheet.Range(FileNameCellName)) _
                                                            Is Nothing Then Exit Sub
      Application.EnableEvents = False
      Me.Cells(1, 1).Select
      Application.EnableEvents = True
      ShowFullPath
End Sub

DisplayFileName にフルパス名をわたしてそのうちのファイル名だけを表示させておきます。その後は、"FileName" のセルがクリックされるたびに、フルパス名が表示されます。

標準モジュール      DisplayFileName() ShowFullPath()

Public Const FileNameCellName = "FileName"
Private fullPath
Public Sub DisplayFileName(filePath)
Dim fileName
      fullPath = filePath
      fileName = Dir(filePath)
      ActiveSheet.Range(FileNameCellName).value = fileName
End Sub
Public Sub ShowFullPath()
      MsgBox fullPath, vbOKOnly, "フルパス名"
End Sub