フォルダ選択ダイアログを表示させるFunction(2)

f:id:akashi_keirin:20180310154006j:plain

フォルダ選択ダイアログを表示させるFunctionを改良する

FileDialog.InitialFileNameプロパティ

akashi-keirin.hatenablog.com

このときに作成したFunctionをちょっと改良する。

このFunctionを使ってフォルダ選択ダイアログを表示させたとき、いつも不便なフォルダ(たぶん、「既定の保存場所」か何か)が最初に表示されるので、目的のフォルダまでチマチマとたどっていかねばならず、めんどくせーなーと思っていたのだ。特に、職場だと共有ドライブを使っているので、実にメンドクサイ。

そこで、ちょっと調べてみると、FileDialog.InitialFileNameプロパティというものをセットすれば良いらしいと分かった。

おなじみコチラによると、

ファイル ダイアログ ボックスに最初に表示されるパスまたはファイル名を表す String を設定するか返します。値の取得および設定が可能です。

構文

式 . InitialFileName

式FileDialog オブジェクトを表す変数を指定します。

とのこと。

特に職場では、マクロを仕込んだブックのあるフォルダがデフォルトになっていると便利だと思ったので、

akashi-keirin.hatenablog.com

リスト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で指し示すフォルダが最初に表示されることになる。

おわりに

あとは、このときに選択したフォルダパスの文字列をどこかで保持しておくようにすれば、一旦ブックを閉じた後でも「前回選択したフォルダからスタート」なんてことができるようになる。