ExcelVBAのフォルダ参照ダイアログでフォルダを指定する
【環境】Windows 10 Pro 64bit、Excel for Office 365
それでは早速?Excelシートに張り付けた「参照」ボタンを押下して、フォルダ参照のダイアログボックスを表示するプログラムを書いていきましょう!
※『その1:仕様』は、以下のリンクを確認してください
[blogcard url=”https://zesys.net/pc/excel-macro/vba-file-list-vol1/”]Excelでファイル一覧を作成する~その1:仕様~[/blogcard]
■フォルダ参照ダイアログボックスを呼び出す関数
ファイルを参照するダイアログボックスの開き方はいくつかあるようなのですが、フォルダを参照する方法はこれしか知りませんw
FileDialog オブジェクトのフォルダピッカーを指定して、フォルダ参照ダイアログボックスを呼び出す関数を作成していきます
Function UseFileDialogFolderPicker() As String
Dim ret As String
ret = ""
' Create a FileDialog object as a Folder Picker dialog box.
With Application.FileDialog(msoFileDialogFolderPicker)
' Display paths of each file selected
If (.Show = -1) Then
' The user pressed the button.
ret = Trim(.SelectedItems(1))
Else
' The user pressed Cancel.
End If
End With
UseFileDialogFolderPicker = ret
End Function
コメントはMicrosoftのサンプルを頂きましたw
【参考】https://docs.microsoft.com/ja-jp/office/vba/api/office.filedialog
簡単に解説します
- 5行目:フォルダピッカーのオブジェクトを宣言します
- 7行目:フォルダピッカーを開いて、アクションボタンが押された場合(キャンセルじゃなかったら)
- 8行目:選択されたアイテムの1つ目を取得します
- 14行目:関数の戻り値として返します
■FileDialogオブジェクト
FileDialogオブジェクトのメンバーでフォルダ参照ダイアログボックスをカスタマイズできる項目を挙げておきます
恐らくはこの3つのプロパティくらいですね
- ButtonName:アクションボタンに表示する文字列を 取得または 設定
- InitialFileName:最初に表示されるパスを 取得または 設定
- Title:ダイアログボックスのタイトルを取得または設定
これらのプロパティを使って書き換えてみます
Function UseFileDialogFolderPicker() As String
Dim ret As String
ret = ""
' Create a FileDialog object as a Folder Picker dialog box.
With Application.FileDialog(msoFileDialogFolderPicker)
.ButtonName = "OK"
.InitialFileName = "C:"
.Title = "選択"
' Display paths of each file selected
If (.Show = -1) Then
' The user pressed the button.
ret = Trim(.SelectedItems(1))
Else
' The user pressed Cancel.
End If
End With
UseFileDialogFolderPicker = ret
End Function
注意すべき点は、「宣言~Showまでの間で使用する」くらいですかね?
フォルダ参照は複数選択できないので、SelectedItems(1)で良いです
もちろん、エラートラップも必要かも知れませんが、ま、特に起きそうもないので、無くても良いかとw
汎用的な使い方をする場合は、これらのプロパティを引数に持つというのも良いかも知れません
その場合は、「InitialFileName」が存在するパスかどうかをチェックしないとエラーが発生する恐れがありますね!