ファイルパスの取得GetOpenFilenameメソッドを使用したファイルのパス取得 2012.09.27 [更新日]2024.11.12
ファイルのパスを取得する際に使用するGetOpenFilenameメソッド。それを用いたコードとメモです。
ポイント
・GetOpenFilenameメソッドの使用例
・ドライブの変更
・カレントフォルダの変更
・Desktop(デスクトップ)パスの取得
GetOpenFilenameメソッドを実行すると「ファイルを開く」のダイアログボックスが表示される。
ダイアログボックスでデフォルト表示されるフォルダは、カレントフォルダである。
カレントフォルダを変更することで任意のフォルダでダイアログボックスを表示できる。
カレントフォルダの変更には ChDirステートメント を使用するが、ChDirステートメントによるフォルダの変更は現在選択されているドライブ内のみに限定されるため、ChDirステートメントでフォルダを変更の前に、ChDriveステートメント でドライブを変更する必要がある。
サンプルコードでは、WSH(Windows Script Host)を用いデスクトップのパスを取得し、デスクトップをカレントフォルダに変更している。
「ファイルを開く」ダイアログボックスは、第5引数の設定により複数のファイルを選択が可能となる。
複数ファイルの選択が可能な設定にした場合、返り値は配列となる。
サンプルコードでは、ダイアログボックスの返り値が配列か配列でないかによって処理を分岐させ、結果を表示している。
Excelマクロ管理ツール
サンプルコード
選択した画像ファイルのパスを表示
'----------------------------------------------------------------- '[ファイルを開く]ダイアログボックスでファイルパスを取得・表示 '----------------------------------------------------------------- ' '[作成日]2012.09.27 [更新日]2024.11.22 ' https://excel.syogyoumujou.com/memorandum/getopenfilename.html '----------------------------------------------------------------- Sub ファイルを開くダイアログボックス使用例() '--------------------------------------- ' 定数設定 '--------------------------------------- Const L_FILE_FILTER As String = "画像タイプ1,*.bmp;*.jpg;*.gif," & _ "画像タイプ2,*.png" ' ファイルフィルター Const L_FILTER_INDEX As Long = 1 ' フィルターインデックス Const L_DIALOG_TITLE As String = "画像ファイルを選択してください" ' ダイアログボックスタイトル Const L_MULTI_SELECT As Boolean = True ' 複数選択の設定 '--------------------------------------- ' カレントフォルダをデスクトップに設定 '--------------------------------------- ' デスクトップフォルダパス取得 Dim strDesktopPath As String strDesktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") ' ドライブの設定 ChDrive Left$(strDesktopPath, 1) ' カレントフォルダの設定 ChDir strDesktopPath '--------------------------------------- ' ファイルを選択 '--------------------------------------- Dim varFilePath As Variant Dim strFilePath As String '《ファイル選択ダイアログボックス》 ' ・ 引数1:ファイルフィルター ' ・ 引数2:ファイルインデックス(既定で表示するフィルター文字列の指定) ' ・ 引数3:ダイアログボックスタイトル ' ・ 引数4:ボタンテキスト(Macintosh用) ' ・ 引数5:複数選択の設定(True:複数選択可 False:複数選択不可) varFilePath = Application.GetOpenFilename(L_FILE_FILTER, _ L_FILTER_INDEX, _ L_DIALOG_TITLE, _ , _ L_MULTI_SELECT) '[キャンセル]ボタンをクリックした場合は抜ける If VarType(varFilePath) = vbBoolean Then Exit Sub ' 引数5 複数選択の設定(MultiSelect)が True の場合 返り値は配列となる If IsArray(varFilePath) Then ' 配列の各要素の文字列を結合し文字列型変数に代入 strFilePath = Join$(varFilePath, vbLf) Else ' 返り値を文字列型変数に代入 strFilePath = varFilePath End If '--------------------------------------- ' 結果表示 '--------------------------------------- MsgBox strFilePath, , "選択したファイルのパス" End Sub
VBAコードをカラーで印刷・Web掲載するためのツールはこちら
メモ
ChDrive ステートメント
現在のドライブを変更する。
引数はドライブを示す文字列式を指定。
2 文字以上の文字列を指定した場合、最初の 1 文字だけが使用される。
使用例:ChDrive "D"
ChDir ステートメント
現在のフォルダを変更する。
引数は新しく設定するフォルダを表す文字列式を指定する。
このステートメントはフォルダを変更できるが、ドライブは変更されない。
使用例:ChDir "D:\TMP"
GetOpenFilenameメソッド
ファイル名を取得するために、[ファイルを開く] ダイアログ ボックスを表示。
ダイアログボックスで指定したファイルは、実際には開かれず、返り値にファイルのパスが格納される。
ダイアログボックスでキャンセル等、入力が取り消された場合は「False」が返る。
ファイルを複数選択した場合、返り値は配列となり、配列の各要素に各ファイルのパスが格納される。
構文:GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
[FileFilter]
省略可能。ファイルの候補を指定する文字列(ファイルフィルター文字列)を指定。
省略した場合は"すべてのファイル (*.*),*.*"になる。
ファイターはフィルター文字列とファイルタイプ("*.拡張子")がセットとなっており、「,」で区切る構成が基本となっている。
フィルター文字列1,ファイルタイプ1
指定例:テキスト ファイル (*.txt),*.txt"
複数のフィルター文字列を対応させる場合には、「,」で区切り2つ目のフィルター文字列とファイルタイプを追加する。
フィルター文字列1,ファイルタイプ1,フィルター文字列2,ファイルタイプ2
指定例:"テキスト ファイル (*.txt),*.txt,アドイン ファイル (*.xla),*.xla"
フィルター文字列1つに対して複数のファイルタイプを対応させる場合には、ファイルタイプを「;」で区切る。
フィルター文字列1,ファイルタイプ1-a;ファイルタイプ1-b
指定例:"Visual Basic ファイル (*.bas;*.txt),*.bas;*.txt"
すべてのファイルを対象とする場合
指定例:"すべてのファイル (*.*),*.*"
[FilterIndex]
省略可能。引数[FileFilter]で指定したファイルフィルターの中で、何番目を既定値にするかを指定。
この引数すると、最初のファイルフィルター文字列が既定値となる。
[Title]
ダイアログボックスのタイトル。この引数を省略すると ダイアログボックスのタイトルは"ファイルを開く" になる。
[ButtonText]
省略可能。Macintosh用の引数。Windowsでは使用しない。
[MultiSelect]
省略可能。Trueを指定すると、複数のファイルを選択できるようになる。この場合返り値は配列となる。
Falseを指定すると、1 つのファイルしか選択できない。既定値はFalse。