3種類の[ファイルを開く]ダイアログボックス


[ファイルを開く]ダイアログボックスを表示するには、いくつかの方法があります。有名なところでは、ApplicatipnオブジェクトのGetOpenFilenameメソッドです。

Sub Sample1()
    Dim Target As String
    Target = Application.GetOpenFilename("Excel ブック,*.xls?")
    If Target = "False" Then Exit Sub
    Workbooks.Open Target
End Sub

GetOpenFilenameメソッドは、ユーザーが選択したブックを返しますが、そのブックを開く処理は自分で書かなければなりません。逆に言えば、選択したファイルのパスを返すだけですから、プログラマにとっての自由度は高いかもしれません。

ダイアログボックスで選択したブックをExcelで開くだけでしたら、もっと簡単な方法があります。ApplicationオブジェクトのFindFileメソッドです。

Sub Sample2()
    Application.FindFile
End Sub

FindFileメソッドは、ダイアログボックスに表示するファイルの種類を拡張子で指定できません。表示されるのは、次の拡張子を持つファイルです。

xl* xlsx xlsm xlsb
xlsm xltx xltm xls
xlt htm html mht
mhtml xml xla xlm
xlw xjs xjm xjc
xjw xja xjt odc
uxdc ods

なんか・・・最初に「xl*」を指定してるんなら、後の「xlsm」とか「xls」とかは不要じゃん、と思いますし、「htm」とか「html」を含めるなら、もっと利用頻度の高い「csv」も入れとけよって。ちなみに、上図のフォルダには「Sample.csv」が保存されていますが、アイコンは表示されていませんよね。

FindFileメソッドは、同じように[ファイルを開く]ダイアログボックスを開きますが[開く]ボタンをクリックすると、ただちに選択したファイルを開きます。[キャンセル]ボタンがクリックされたときは何もしませんので、そのための処理を記述する必要はありません。ちなみに、選択したファイルが正常に開かれると、FindFileメソッドはTrueを返し、[キャンセル]ボタンがクリックされるとFalseを返します。また、FindFileメソッドで表示されるダイアログボックスでは、標準で複数のファイルを選択できます。

もう少し複雑な制御をしたいときは、FileDialogオブジェクトを使う手もあります。FileDialogオブジェクトは、次の4種類のダイアログボックスを表示できます。

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

FileDialogオブジェクトを使って開くブックを選択するには、次のようにします。ここでは、プロパティの説明をかねて、あれこれと設定をしてみましょう。

Sub Sample3()
    Dim FD As FileDialog, f As Variant
    Set FD = Application.FileDialog(msoFileDialogOpen)
    With FD
        ''ボタンのテキストを[Select]にします
        .ButtonName = "Select"
        With .Filters
            ''「ファイルの種類」をクリアします
            .Clear
            ''「ファイルの種類」を登録します
            .Add "Excelブック", "*.xls; *.xlsx; *.xlsm", 1
            .Add "テキストファイル", "*.txt", 2
        End With
        ''表示するフォルダを指定します
        .InitialFileName = "C:\Tmp\"
        ''表示するアイコンの大きさを指定します。
        .InitialView = msoFileDialogViewLargeIcons
        If .Show = True Then
            ''有効なボタンがクリックされた
            ''選択されたファイルがテキストファイルだったら
            If Right(.SelectedItems(1), 3) = "txt" Then
                For Each f In .SelectedItems
                    ''イミディエイトウィンドウに出力します
                    Debug.Print f
                Next f
            Else
                ''ブックとして開きます
                .Execute
            End If
        Else
            ''[キャンセル]ボタンがクリックされた
            MsgBox "キャンセルされました"
        End If
    End With
End Sub

[ファイルの種類]のところは、次のようになります。

FileDialogオブジェクトのButtonNameプロパティは、ボタンに表示するテキストを設定します。ただし、Windows 7のExcel 2007以降では無視されるようです。上記のマクロを、Windows XPのExcel 2007で実行すると、次のようになります。

Filtersプロパティは、ダイアログボックスの「ファイルの種類」で選択できるファイルのパターンを表すFileDialogFilterコレクションを返します。

Clearメソッドを実行すると、あらかじめ用意されているすべてのパターンがクリアされ、Addメソッドで新しいパターンを追加できます。

InitialFileNameプロパティは、ダイアログボックスを表示するフォルダやファイルを指定します。

InitialViewプロパティは、ダイアログボックスに表示するファイル名やアイコンの状態を指定します。これも、WindowsやExcelのバージョンによっては、無視されることがあります。

Showメソッドは、指定したダイアログボックスを表示します。Showメソッドは、[キャンセル]ボタンがクリックされるとFalseを返し、有効なボタンがクリックされるとTrueを返します。

選択したファイルのパスは、文字列形式でFileDialogSelectedItemsコレクションに格納されますので、選択したファイルを個別に調べることも可能です。

FileDialogオブジェクトのExecuteメソッドを実行すると、[開く]や[保存]などユーザーが選択したアクションが実行されます。