VBAでファイルダイアログを開く処理について紹介します。
実際に作ったファイルはこちらからダウンロードできます。
ダイアログ用の参照設定
ファイル用もフォルダ用もダイアログを開くに参照設定を必要です。
手順はコードエディターから「ツール(T)」→「参照設定(R)」と移動します。
その後、Microsoft Office 16.0 Object Libraryにチェックを付けておいてください。
16.0はバージョンに寄ります。
ファイルパス取得のダイアログ コード
ファイルパス取得用のダイアログは以下のような書き方です。
処理の流れは以下の順です。
①ファイルダイアログを開く
②ファイルが選択されてらばパスをメッセージ表示
③選択されなければキャンセルのメッセージ表示
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 37 38 39 40 41 |
'======================================= '目的 :選択したファイルのフルパスを取得 '======================================= Private Sub GetFilePath_Click() '変数定義 Dim intRet As Integer 'ダイアログ用変数 Dim FilePath As String 'フルパス用変数 With Application.FileDialog(msoFileDialogOpen) .Title = "取込みファイル設定ダイアログ" .Filters.Clear .Filters.Add "Microsoft Office Excelファイル", "*.xls,*.xlsx,*.xlsm" .FilterIndex = 1 '複数ファイル選択を許可しない .AllowMultiSelect = False '初期パスを設定 .InitialFileName = CurrentProject.Path 'ダイアログを表示 intRet = .Show 'ファイルが選択された場合 If intRet <> 0 Then 'パスを設定 FilePath = Trim(.SelectedItems.Item(1)) 'パスを表示 MsgBox FilePath Else 'ファイルが選択されていない場合 MsgBox "キャンセルしました。" End If End With End Sub |
解説
FileDialogのShowでダイアログを出します。
ダイアログで選択したファイルがある場合intRetには結果引数として「-1」が返ってきます。
ファイルを選択しなかった場合、「0」が結果引数として返ってきます。
ファイルを選択した場合、SelectedItems.Item(1)にファイルのパスが取得されます。
例えば、ダイアログから取得したファイルパスを使ってエクセルをAccessに取込むというような処理に使えそうですね。
補足
・フィルタ設定
エクセル関係のファイルだけしか表示されないようにしています。
用途によっては「*」でも良いでしょう。
・複数ファイル選択許可
1ファイルだけに設定していますが、複数も可能です。
その場合、FilePath = Trim(.SelectedItems.Item(1))の番号は選択したファイル番号を設定する必要があります。
フォルダのパス取得のダイアログ コード
フォルダパス取得用のダイアログは以下のような書き方です。
処理の流れは以下の順です。
①ダイアログを開く
②フォルダが選択されてればパスをメッセージ表示
③選択されなければキャンセルのメッセージ表示
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 |
'======================================= '目的 :選択したフォルダのパスを取得 '======================================= Private Sub GetFolderPath_Click() Dim FolderPath As String 'フォルダパス用変数 'ファイルダイアログを開く With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then 'パスを設定 FolderPath = .SelectedItems(1) 'パスを表示 MsgBox FolderPath End If 'フォルダが選択されていない場合 If FolderPath = "" Then MsgBox "キャンセルしました。" End If End With End Sub |
解説
FileDialogのShowでダイアログを出します。(ファイルパス取得と同じ)
ダイアログで選択した場合、Trueが返ってきます。
Trueの場合、SelectedItems(1)に選択したフォルダのパスがセットされています。
なので、FolderPathの変数に選択したパスをセットしています。
ロジックとしてFolderPathに何も入っていない場合、フォルダ選択をやめる以外はありません。
そのため、FolderPathが空白ならキャンセルされましたと表示をしています。
例えば、ダイアログを表示して指定したフォルダにAccessからtsvやcsvを出力するときなどに使えそうですね。
補足
・複数フォルダ選択
複数フォルダ選択はできないようです。
・3種類の[ファイルを開く]ダイアログボックス
http://officetanaka.net/excel/vba/tips/tips154.htm
・[ファイルを開く]ダイアログボックスを表示する(GetOpenFilenameメソッド)
https://www.moug.net/tech/exvba/0060013.html
■Excelマクロ
てっとり早く確実にマスターできる Excel VBAの教科書
■Accessマクロ
よくわかる Microsoft Access 2016 基礎
Accessのデータベースのツボとコツがわかる本2013対応