ユーザが選択したファイル名を取得する(3)

ユーザが選択したファイル名を取得する

前々回

akashi-keirin.hatenablog.com

前回

akashi-keirin.hatenablog.com

の続き。

ファイルフィルタを設定する

フォルダ選択と違って、ファイルには「種類」というものがあるので、いつもいつも「すべてのファイル」が表示されたのでは、ユーザとしてはたまらない。

そこで活躍するのがファイルフィルタである。

f:id:akashi_keirin:20190921125922j:plain

これ。

こいつをうまく設定してやれば、選ばせたい種類のファイルだけを表示することができるので、ユーザフレンドリーになる。

FileDialog.Filtersオブジェクトを使う

ファイルフィルタを設定するには、FileDialogFiltersオブジェクトを操作する。

FileDialogFiltersオブジェクトは、FileDialogオブジェクトのFiltersプロパティから取得する。

たとえば、変数fpDialogFileDialogオブジェクトがぶち込まれているとして、

With fpDialog
  Call .Filters.Add("FLACファイル", "*.flac")
  Call .Show
End With

として実行すると、

f:id:akashi_keirin:20190921125924j:plain

こんなファイルダイアログが表示される。

ちゃんとファイルフィルタが設定されている。

FileDialogオブジェクトのFiltersプロパティがFileDialogFiltersオブジェクトを返し、そのAddメソッドを実行している。

Addメソッドの書式は、

[FileDialogFilters].Add(Description As String,Extention As String,[Position])

である。

ちなみに、複数の拡張子をつなぐときは、Addメソッドの第2引数(Extentions)に複数の拡張子を設定するときは、「"*.wav;*.flac;*.mp3;*.wma"」のように、「;」(セミコロン)で区切れば良い。

また、FileDialogオブジェクトでは、特に指定しなければ前回の設定が引き継がれる模様。

よって、Addメソッド実行前にClearメソッドを実行した方が良いかも知れない。

複数のファイルフィルタを設定したダイアログボックスを表示する

リスト1
Private Sub test04()
  Dim fpDialog As FileDialog
  Set fpDialog = Application.FileDialog(msoFileDialogFilePicker)
  With fpDialog
    .Title = "ち~んw"
    .InitialFileName = "D:\Music\ACCEPT"
    Call .Filters.Clear    '……(1)'
    Call .Filters.Add("ち~んw", "*.www", 1)    '……(2)'
    Call .Filters.Add("音楽ファイル", "*.flac;*.mp3", 2)
    Call .Filters.Add("全てのファイル", "*.*", 3)
    Call.Show
    Call .Filters.Clear    '……(3)'
  End With
End Sub

まず、(1)の

Call fpDialog.Filters.Clear

で、一旦ファイルフィルタをクリア。

(2)からの3行

Call fpDialog.Filters.Add("ち~んw", "*.www", 1)
Call fpDialog.Filters.Add("音楽ファイル", "*.flac;*.mp3", 2)
Call fpDialog.Filters.Add("全てのファイル", "*.*", 3)

では、Addメソッドを3回使用してファイルフィルタを設定している。

操作が終わったら、(3)の

Call fpDialog.Filters.Clear

で、一応FileDialogFiltersオブジェクトをクリアしておく。

コイツを実行すると、ファイル選択ダイアログが表示され、

f:id:akashi_keirin:20190921125927g:plain

こんな風に動作する。(しまった、下の方、画面が切れとるやないか……。)

おわりに

ここまでで準備は完了。次回は、いよいよファイルパス取得について書く。

つづきはコチラ

akashi-keirin.hatenablog.com