HOME > 即効テクニック > Excel VBA > ファイル操作関連のテクニック > もうひとつの[ファイルを開く]ダイアログボックス(FileDialogオブジェクト)

もうひとつの[ファイルを開く]ダイアログボックス(FileDialogオブジェクト)|Excel VBA

ファイル操作関連のテクニック

もうひとつの[ファイルを開く]ダイアログボックス(FileDialogオブジェクト)

(Excel 2002/2003/2007/2010/2013/2016)

FileDialogオブジェクトを使うと、[ファイルを開く]ダイアログボックスや[名前を付けて保存]ダイアログボックスなど、Officeアプリケーションで使用する標準的なダイアログボックスを表示できます。

FileDialogオブジェクトは、次の4種類のダイアログボックスを表示できます。

  • [ファイルを開く]ダイアログボックス(msoFileDialogOpen)
  • [名前を付けて保存]ダイアログボックス(msoFileDialogSaveAs)
  • ファイルを選択する[参照]ダイアログボックス(msoFileDialogFilePicker)
  • フォルダを選択する[参照]ダイアログボックス(msoFileDialogFolderPicker)

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以降に追加されたオブジェクトです。