もうひとつの[ファイルを開く]ダイアログボックス(FileDialogオブジェクト)|Excel VBA |
FileDialogオブジェクトを使うと、[ファイルを開く]ダイアログボックスや[名前を付けて保存]ダイアログボックスなど、Officeアプリケーションで使用する標準的なダイアログボックスを表示できます。
FileDialogオブジェクトは、次の4種類のダイアログボックスを表示できます。
FileDialogオブジェクトを使って開くブックを選択するには、次のようにします。
ここでは、プロパティの説明をかねて、あれこれと設定をしてみましょう。
Sub Sample()
Dim f As Variant
With Application.FileDialog(msoFileDialogOpen)
'ボタンのキャプションを[Select]に設定
.ButtonName = "Select"
With .Filters
'「ファイルの種類」をクリア
.Clear
'「ファイルの種類」を登録
.Add "Excelブック", "*.xls; *.xlsx; *.xlsm", 1
.Add "テキストファイル", "*.txt", 2
End With
'表示するフォルダを指定
.InitialFileName = "C:\Data\"
'表示するアイコンの大きさを指定
.InitialView = msoFileDialogViewLargeIcons
If .Show = -1 Then '有効なボタンがクリックされた
'選択されたファイルがテキストファイルだったら
If Right(.SelectedItems(1), 3) = "txt" Then
For Each f In .SelectedItems
'イミディエイトウィンドウにパスを出力
Debug.Print f
Next f
Else
'Excelブックだったらブックとして開く
.Execute
End If
Else '[キャンセル]ボタンがクリックされた
MsgBox "キャンセルされました"
End If
End With
End Sub
FileDialogオブジェクトのButtonNameプロパティには、ボタンに表示する文字列を設定します。
ただし、Windows Vista以降のOSでは、このプロパティを設定してもダイアログボックス表示時のボタンの文字列は[開く]のままです。ダイアログボックス内でいずれかのファイルを選択すると、ButtonNameプロパティで設定した文字列がボタンに変わります。
Windows XPまではダイアログボックス表示時にButtonNameプロパティで設定した文字列がボタンに表示されていたので、どうやらバグのようですね。
Filtersプロパティは、ダイアログボックスの「ファイルの種類」で選択できるファイルのパターンを表すFileDialogFiltersコレクションを返します。
Clearメソッドを実行すると、あらかじめ用意されているすべてのパターンがクリアされ、Addメソッドで新しいパターンを追加できます。
InitialFileNameプロパティは、ダイアログボックスを表示するフォルダやファイルを指定します。
InitialViewプロパティは、ダイアログボックスに表示するファイル名やアイコンの状態を指定します。ただし、これもWindows Vista以降、設定が無視されることがあります。
Showメソッドは、指定したダイアログボックスを表示します。
Showメソッドは、有効なボタンがクリックされると-1を返し、 [キャンセル]ボタンがクリックされると0を返します。
選択したファイルのパスは、文字列形式でFileDialogSelectedItemsコレクションに格納されるので、選択したファイルを個別に操作することも可能です。
FileDialogオブジェクトのExecuteメソッドを実行すると、[開く]や[保存]などユーザーが選択したアクションを実行します。
FileDialogオブジェクトはExcel 2002以降に追加されたオブジェクトです。