VBA:ダイアログを使った複数or単独ファイルの選択方法
そこでここではダイアログを使った複数もしくは単独のファイルの選択方法について説明してきます。
◆複数ファイルの選択方法
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 42 43 44 45 46 47 48 49 50 51 52 |
Sub 複数ファイルの指定() Dim FilePath() As String '//(1)ファイルの指定' If SelectFileDialog(FilePath()) Then Else MsgBox "実行がキャンセルされました。" Exit Sub End If '//ツールにするなら以下に処理を入れる。 '//ここでは割愛してます。 MsgBox "完了" End Sub '*********************************************************' '(1)複数ファイルの取得' Public Function SelectFileDialog(ByRef FilePath() As String) As Boolean Dim myF As FileDialog Dim i As Long Set myF = Application.FileDialog(msoFileDialogFilePicker) Dim cnt As Long With myF '最初に開く場所(初期フォルダ)の指定。ここではデスクトップにしています。' .InitialFileName = CreateObject("WScript.Shell").SpecialFolders("Desktop") '//ダイアログの左上に出てくるタイトル名' .Title = "圧縮するファイルの指定(複数選択可)" '//①Falseはファイル一つ指定、Trueだと複数のファイルの選択が可能になる。' .AllowMultiSelect = True If .Show = True Then 'ダイアログを開く' cnt = .SelectedItems.Count - 1 ReDim FilePath(cnt) '①の複数ファイルを選択するのをTrueにした場合は全てのファイルのパスを戻します。Falseの場合は単独のファイルのパスのみ戻します。' For i = 1 To .SelectedItems.Count '指定した複数のファイルを配列にして返す' FilePath(i - 1) = .SelectedItems(i) Next i SelectFileDialog = True Else SelectFileDialog = False End If End With Set myF = Nothing End Function |
この記事の内容を使ったツール
この記事の内容を使ったツールは以下の記事のものになります。
VBAツール:【Excel】複数ファイルーファイル毎一括圧縮ツール(Windows標準 zip圧縮)
【Excel】「複数ファイルーファイル毎一括圧縮ツール」Windows標準のzipしか使えない環境でも、複数ファイルを一括でファイル毎にzipファイルにするツールです。
◆単独のファイルの場合
ダイアログを使ってファイル指定する際には「FileDialog(msoFileDialogFilePicker)」を使います。
ここではファイルを選択するとFunctionプロシージャ(ここではSelectFileDialog)に選択したパスを返し、キャンセルをすると空白のままで返します。
単独ファイルなので、①部分は「False」にして、複数ファイル処理用のloop処理などを外してあります。
上の「複数ファイル」で、「False」にすれば単独ファイルでも処理できるので、コード数を減らす以外は「複数ファイル」ので作っておいてもいいかもです。
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 FilePath As String FilePath = SelectFileDialog If FilePath <> "" Then MsgBox "ファイルパス:" & FilePath Else MsgBox "キャンセルされました" End If End Sub Public Function SelectFileDialog() Dim myF As FileDialog Set myF = Application.FileDialog(msoFileDialogFilePicker) With myF '最初に開く場所(初期フォルダ)の指定。ここではデスクトップにしています。' .InitialFileName = CreateObject("WScript.Shell").SpecialFolders("Desktop") '//ダイアログの左上に出てくるタイトル名' .Title = "ファイルの指定" '//①ファイル単独の場合は「False」。「True」にすると複数のフォルダの選択が可能になる。' 'このままでは処理できないので、この記事の「複数ファイル」のサンプルを使う' .AllowMultiSelect = False If .Show = True Then 'ダイアログを開く' SelectFileDialog = .SelectedItems(1) '指定したファイルを返す' End If End With Set myF = Nothing End Function |