GetOpenFilenameメソッドを使用したファイルのパス取得

ファイルパスの取得

 ファイルのパスを取得する際に使用するGetOpenFilenameメソッド。それを用いたコードとメモです。

ポイント

 ・GetOpenFilenameメソッド
 ・ドライブの変更
 ・フォルダの変更
 ・Desktop(デスクトップ)パスの取得

 GetOpenFilenameメソッドを実行すると「ファイルを開く」のダイアログが表示される。その際デフォルトで開かれるフォルダは、カレントフォルダである。
 デフォルトで開かれるフォルダをアクティブブックのフォルダにしたい時、それがカレントフォルダと異なる場合は、アクティブブックのフォルダをカレントフォルダに変更する必要がある。

 フォルダの変更に使用するChDirステートメントは、現在選択しているドライブ内のみと限定されるため、フォルダ変更の前に、ChDriveステートメントでドライブも任意のものに変更する必要がある。

 アクティブブックが未セーブである場合は、アクティブブックのパスを取得できない。その場合はWSH(Windows Script Host)を用いデスクトップのパスを取得し、デスクトップをカレントフォルダに変更するコードを補足として追加する。

 サンプルコードのようなケースは、主にアドイン等での使用が考えられる。


サンプルコード

選択した画像ファイルのパスを表示

Sub Select_File()
    Dim strFilePath As String
    'ドライブの設定とカレントフォルダの設定
    Call Change_Drive 'ここを省略するとカレントフォルダが開かれる
    'ファイルを選択
    strFilePath = Application.GetOpenFilename("画像データ,*.bmp;*.jpg;*.gif")
    If UCase$(strFilePath) = "FALSE" Then Exit Sub
    MsgBox "選択したファイルのパスは" & vbCrLf & "[" & strFilePath & "]"
End Sub
'-------------------------------------------------------------------------------------------------------

Private Sub Change_Drive()
    Dim strDrive As String
    Dim strDPath As String
    strDPath = ActiveWorkbook.Path
    If Len(strDPath) = 0 Then strDPath = DeskTop_Path()
    If InStr(1, strDPath, ":", vbTextCompare) = 0 Then strDPath = DeskTop_Path()
    strDrive = Left$(strDPath, InStr(1, strDPath, ":", vbTextCompare) - 1)
    If Len(strDrive) = 1 Then
        ChDrive strDrive  'ドライブの変更
        ChDir strDPath    'カレントフォルダの変更
    End If
End Sub
'-------------------------------------------------------------------------------------------------------

Function DeskTop_Path() As String
    Dim objWShell As Object 'WScript.Shell
    Set objWShell = CreateObject("WScript.Shell")
    'デスクトップパス
    DeskTop_Path = objWShell.SpecialFolders("Desktop")
End Function

メモ

◆ChDrive ステートメント
 現在のドライブを変更する。引数はドライブを示す文字列式を指定。2 文字以上の文字列を指定した場合、最初の 1 文字だけが使用される。
使用例:ChDrive "D"

◆ChDir ステートメント
 現在のフォルダを変更する。引数は新しく設定するフォルダを表す文字列式を指定する。このステートメントはフォルダを変更できるが、ドライブは変更されない。
使用例:ChDir "D:\TMP"

◆GetOpenFilenameメソッド
 ファイル名を取得するために、[ファイルを開く] ダイアログ ボックスを表示。ダイアログボックスで指定したファイルは、実際には開かれず、返り値にファイルのパスが格納される。ダイアログボックスでキャンセル等、入力が取り消された場合は「False」が返る。

 構文:GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)

 [FileFilter]
  省略可能。ファイルの候補を指定する文字列(ファイルフィルター文字列)を指定。
  省略した場合は"すべてのファイル (*.*),*.*"になる。
 [FilterIndex]
  省略可能。引数[FileFilter]で指定したファイルフィルターの中で、何番目を既定値にするかを指定。
  この引数すると、最初のファイルフィルター文字列が既定値となる。
 [Title]
  ダイアログボックスのタイトル。この引数を省略すると "ファイルを開く" になる。
 [ButtonText]
  省略可能。Macintosh用の引数。Windowsでは使用しない。
 [MultiSelect]
  省略可能。Trueを指定すると、複数のファイルを選択できるようになる。
 Falseを指定すると、1 つのファイルしか選択できない。既定値はFalse。

【備考】
 [FileFilter]の指定例
  ・1つのフィルター:"テキスト ファイル (*.txt)"
  ・1つのフィルターに複数種類のファイル:"Visual Basic ファイル (*.bas;*.txt),*.bas;*.txt"
  ・2つのフィルター:"テキスト ファイル (*.txt),*.txt,アドイン ファイル (*.xla),*.xla"
  ・(省略):"すべてのファイル (*.*),*.*"

◆UCase関数
 参照

Excel Tips for Teachers

Copyright (C) 2009- 坂江 保 All Rights Reserved.