VBA:ダイアログを使った取込みファイルやフォルダの選択
そこでここでは取込みファイルやフォルダの選択方法について説明してきます。
※ダイアログの初期フォルダの設定方法は記事の最後に記載しています。
◆事前準備
ダイアログを使うには「FileDialogオブジェクト」を使うのですが、有効になっていない場合はエラーになります。
そのためVBAの「参照設定」で以下のオブジェクトライブラリの参照を有効にしておく必要があります。
(Officeのバージョンによって数値(15.0など)は変わります。)
・以下の画面が表示されるので、対象を探します。
・設定をしていない場合は以下のエラーが出ます。
◆ダイアログを使ったファイルの指定
ファイルの選択については以下の記事に複数・単独ファイルでまとめて書きました。
◆ダイアログを使ったフォルダの指定
ダイアログを使ってファイル指定する際には「FileDialog(msoFileDialogFolderPicker)」を使います。
ここではファイルを選択するとFunctionプロシージャ(ここではSelectFolderDialog)に選択したパスを返し、キャンセルをすると空白のままで返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Private Sub フォルダの選択_Click() Dim FolderPath As String FolderPath = SelectFolderDialog If FolderPath <> "" Then MsgBox "指定場所:" & FolderPath Else MsgBox "キャンセルされました" End If End Sub Public Function SelectFolderDialog() Dim myF As FileDialog Set myF = Application.FileDialog(msoFileDialogFolderPicker) With myF '//最初に開く場所(初期フォルダ)の指定。ここではデスクトップにしています。' .InitialFileName = CreateObject("WScript.Shell").SpecialFolders("Desktop") '//ダイアログの左上に出てくるタイトル名' .Title = "フォルダの指定" '//①Falseはフォルダ一つ指定、Trueだと複数のフォルダの選択が可能になるが配列で取得できるようにしていないのでここではエラーになる。' .AllowMultiSelect = False If .Show = True Then 'ダイアログを開く' SelectFolderDialog = .SelectedItems(1) '指定したフォルダを返す' End If End With Set myF = Nothing End Function |
◆ダイアログの初期フォルダの設定方法
上記のサンプルコードの以下の部分(20行目ぐらい)で設定しています。
「CreateObject(“WScript.Shell”).SpecialFolders(“Desktop”) 」となっている箇所を、任意のパスに変更すればそのパスが最初のフォルダとして開きます。
1 2 |
'//最初に開く場所(初期フォルダ)の指定。ここではデスクトップにしています。' .InitialFileName = CreateObject("WScript.Shell").SpecialFolders("Desktop") |
任意の場所に変更したい場合は以下のようにすれば任意の場所が最初に開きます。
1 2 3 |
'//▼任意のフォルダにしたい場合' '//以下のように変更すると、指定したフォルダが最初の画面として開きます。' .InitialFileName = "C:\Users\フォルダ名" |