ファイルパスの取得GetOpenFilenameメソッドを使用したファイルのパス取得 2012.09.27
ファイルのパスを取得する際に使用するGetOpenFilenameメソッド。それを用いたコードとメモです。
ポイント
・GetOpenFilenameメソッド
・ドライブの変更
・フォルダの変更
・Desktop(デスクトップ)パスの取得
GetOpenFilenameメソッドを実行すると「ファイルを開く」のダイアログが表示される。その際デフォルトで開かれるフォルダは、カレントフォルダである。
アクティブブックのフォルダをデフォルトで開かれるフォルダしたい場合は、カレントフォルダを変更する必要がある。
フォルダの変更に使用するChDirステートメントは、現在選択しているドライブ内のみと限定されるため、フォルダ変更の前に、ChDriveステートメントでドライブも任意のものに変更する必要がある。
アクティブブックが未セーブである場合は、アクティブブックのパスを取得できない。その場合はWSH(Windows Script Host)を用いデスクトップのパスを取得し、デスクトップをカレントフォルダに変更するコードを補足として追加する。
サンプルコードのようなケースは、主にアドイン等での使用が考えられる。
Excelマクロ管理ツール
サンプルコード
選択した画像ファイルのパスを表示
Sub Select_File() Dim varFileName As Variant, strFilePath As String 'ドライブの設定とカレントフォルダの設定 Call Change_Drive 'ここを省略するとカレントフォルダが開かれる 'ファイルを選択 varFileName = Application.GetOpenFilename("画像データ,*.bmp;*.jpg;*.gif", , , , True) If VarType(varFileName) = vbBoolean Then Exit Sub If IsArray(varFileName) Then strFilePath = Join$(varFileName, vbCrLf) Else strFilePath = varFileName End If 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"
・(省略):"すべてのファイル (*.*),*.*"