Home » エクセルマクロ・Excel VBAの使い方 » Applicationオブジェクト » マクロ実行中にフォルダーを選択・指定してもらう-FileDialog(msoFileDialogFolderPicker)

マクロ実行中にフォルダーを選択・指定してもらう-FileDialog(msoFileDialogFolderPicker)

対象:Excel2003, Excel2007, Excel2010, Excel2013

「vba フォルダを選択するダイアログ」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが、時折見られます。

VBA(Visual Basic for Applications)で、フォルダーを選択するダイアログを表示する方法を探している方による検索です。

Excel・Windows・Internet Explorerなどのバージョンによって、ファイル・フォルダーを操作する方法は、いろいろとあります。

[スポンサードリンク]

フォルダーを選択してもらうサンプルマクロ

最近の環境で、フォルダーをユーザーに指定してもらうためには、FileDialogオブジェクトを使うのがもっとも基本的な操作でしょうか。

Sub ユーザーにフォルダーを選択してもらう()

 Dim dlg As FileDialog
 Dim fold_path As String

 Set dlg = Application.FileDialog(msoFileDialogFolderPicker)

 ' キャンセルボタンクリック時にマクロを終了
 If dlg.Show = False Then Exit Sub

 ' フォルダーのフルパスを変数に格納
 fold_path = dlg.SelectedItems(1)

 MsgBox fold_path

End Sub

上記のマクロを実行すると、下図のようなフォルダーを指定するダイアログが表示され、

マクロ実行中にフォルダーを選択・指定してもらう

フォルダーを指定して[OK]ボタンをクリックすると、指定されたフォルダーのフルパスがメッセージボックスに表示されます。

サンプルマクロの解説

Application.FileDialogプロパティの引数・FileDialogTypeに、定数・msoFileDialogFolderPickerを指定すると、フォルダーを指定する状態でFileDialogオブジェクトが取得できます。

上記のマクロではFileDialog型のオブジェクト変数dlgにFileDialogをセットしています。
  Set dlg = Application.FileDialog(msoFileDialogFolderPicker)

FileDialogオブジェクトのShowメソッドを実行すると、フォルダーを選択するダイアログが表示されます。

ダイアログで[キャンセル]ボタンがクリックされたような場合には0(ゼロ)・Falseが返されるので、上記のコードでは、
  If dlg.Show = False Then Exit Sub
とFalseが返されたとき(キャンセルされたとき)に、Subプロシージャを抜けるようにしています。

指定されたフォルダーのフルパスを取得しているのが
  fold_path = dlg.SelectedItems(1)
です。

FileDialogオブジェクトのSelectedItemsプロパティは、選択されているファイルのフルパスをFileDialogSelectedItemsオブジェクトとして返してきます。

FileDialogSelectedItemsオブジェクトのデフォルトはItemメソッドで、文字列型のデータ(フルパス)を取得できます。

フォルダーの場合は1つしか選択できないのですが、やっぱりFileDialogSelectedItemsオブジェクトとして返されるので、その1つ目を取得するために
 dlg.SelectedItems(1)
としています。

マクロ実行中にフォルダーを選択・指定してもらう

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Applicationオブジェクト » マクロ実行中にフォルダーを選択・指定してもらう-FileDialog(msoFileDialogFolderPicker)

「Applicationオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.