フォルダ選択ダイアログを表示させるFunction(2)
フォルダ選択ダイアログを表示させるFunctionを改良する
FileDialog.InitialFileNameプロパティ
このときに作成したFunctionをちょっと改良する。
このFunctionを使ってフォルダ選択ダイアログを表示させたとき、いつも不便なフォルダ(たぶん、「既定の保存場所」か何か)が最初に表示されるので、目的のフォルダまでチマチマとたどっていかねばならず、めんどくせーなーと思っていたのだ。特に、職場だと共有ドライブを使っているので、実にメンドクサイ。
そこで、ちょっと調べてみると、FileDialog.InitialFileNameプロパティというものをセットすれば良いらしいと分かった。
おなじみコチラによると、
ファイル ダイアログ ボックスに最初に表示されるパスまたはファイル名を表す String を設定するか返します。値の取得および設定が可能です。
構文
式 . InitialFileName
式FileDialog オブジェクトを表す変数を指定します。
とのこと。
特に職場では、マクロを仕込んだブックのあるフォルダがデフォルトになっていると便利だと思ったので、
のリスト1を次のように書き換えた。
リスト1 標準モジュール
Public Function getSelectedFolderPath( _ Optional ByVal defaultFolderPath As String, _ Optional ByVal titleOfDialog As String) As String If defaultFolderPath = "" Then _ defaultFolderPath = ThisWorkbook.Path '……(1)' If Dir(defaultFolderPath, vbDirectory) = "" Then _ defaultFolderPath = ThisWorkbook.Path Dim folderPath As String Dim isSelected As Boolean With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = defaultFolderPath '……(2)' If titleOfDialog <> "" Then .Title = titleOfDialog Else .Title = "フォルダ選択" End If isSelected = .Show If isSelected Then getSelectedFolderPath = .SelectedItems(1) Else getSelectedFolderPath = "" End If End With End Function
変えたのは2箇所。
まず、(1)からの実質2行
If defaultFolderPath = "" Then defaultFolderPath = ThisWorkbook.Path If Dir(defaultFolderPath, vbDirectory) = "" Then defaultFolderPath = ThisWorkbook.Path
まず、引数defaultFolderPathが""だったら、このブックのあるフォルダパスをdefaultFolderPathにセットする。
次に、Dir関数を使って、defaultFolderPathで指し示されるフォルダが存在するかどうか調べ、存在しなかったらこのブックのあるフォルダパスをdefaultFolderPathにセットする。
これで、実在する何らかのフォルダパスがdefaultFolderPathにセットされていることになる。
後は、(2)の
Application.FileDialog(msoFileDialogFolderPicker) _ .InitialFileName = defaultFolderPath
で、InitialFileNameプロパティにdefaultFolderPathの値をセット。
これでShowメソッドを実行したときにdefaultFolderPathで指し示すフォルダが最初に表示されることになる。
おわりに
あとは、このときに選択したフォルダパスの文字列をどこかで保持しておくようにすれば、一旦ブックを閉じた後でも「前回選択したフォルダからスタート」なんてことができるようになる。