FileDialog オブジェクトの使用
Paul Cornell
Microsoft Corporation
April 2001
対象 :
Microsoft® Office XP
概要 : Microsoft Office 10.0 Object Library の FileDialog オブジェクト モデルを使用して、ファイル ダイアログ ボックスを操作する方法を説明します。
MSDN Online Code Center (英語) で、 ODC_FileDlgObjs.exe サンプル コードを表示できます。
目次
はじめに
ファイル ダイアログ ボックスのインターフェイス要素
FileDialog オブジェクト モデルの調査
例 : 選択したファイルの連結
まとめ
はじめに
Office のファイル ダイアログ ボックスは、ユーザーやアプリケーションにファイルやフォルダを操作する機能を提供します。[ファイルを開く] や [名前を付けて保存] ファイル ダイアログ ボックスは Office 2000 にも存在しましたが、開発者がプログラムからファイル ダイアログ ボックスにアクセスする手段はあまりありませんでした。 Office XP 以前は、ファイル ダイアログ ボックスに依存するソリューションをプログラミングおよび配布するには、開発者は Microsoft Visual Basic® など個別の製品で使用できる Common Dialog ActiveX® コントロールを組み込むか、Microsoft Windows® アプリケーション プログラミング インターフェイス (API) を使用する必要がありました。
しかし、Office XP では、[ファイルを開く] や [名前を付けて保存] ファイル ダイアログ ボックスは、ファイルまたはフォルダ選択用の 2 つの新しいファイル ダイアログ ボックス ([ファイル選択] および [フォルダ選択]) と共に Office 10.0 Object Library 内から直接使用できるようになりました。これらの新しいファイル ダイアログ ボックスを使用して、開発者はカスタム ユーザー インターフェイスを作成しないで、ユーザーからファイルの一覧やフォルダ パスを受け取ることができます。また、Office XP の新しい FileDialog オブジェクト モデルを使用して、以下のようなファイル ダイアログ ボックスのユーザー インターフェイス項目にプログラムからアクセスできます。
ファイル ダイアログ ボックスのタイトル テキストの設定
"操作ボタン" テキスト ([ファイルを開く]、[上書き保存] など) の設定
使用可能なファイルの種類 (*.doc、*.xls など) の設定
初期ファイルまたはフォルダ選択の設定
初期表示の設定 ([大きいアイコン] ビュー、[縮小表示] ビューなど) の設定
単一ファイル選択または複数ファイル選択の許可
プログラムからファイル ダイアログ ボックスにアクセスする方法の理解を深めるために、ファイル ダイアログ ボックスのさまざまなユーザー インターフェイス要素とこれらの要素が FileDialog オブジェクト モデルにどのように対応しているかを調べてみましょう。
ファイル ダイアログ ボックスのユーザー インターフェイス要素
どのようにファイル ダイアログ ボックスを操作できるかをより理解するために、図 1 にファイル ダイアログ ボックスのユーザー インターフェイス要素のグラフィック表現を示します。また、表 2 にこれらの要素の一部の説明と対応する FileDialog オブジェクト モデルを示します。
図 1. ファイル ダイアログ ボックスのユーザー インターフェイス要素
表 2. ファイル ダイアログ ボックス要素の説明と FileDialog オブジェクトのメンバ
ファイル ダイアログ ボックスの要素 | 説明 | FileDialog オブジェクトのメンバ |
タイトル | ファイル ダイアログ ボックスのタイトル。 | Title プロパティ |
[ファイルの場所] ボックスと [ファイル名] ボックス | 表示される初期パスまたはファイル名。 | InitialFileName プロパティ |
[表示] ボタン | 初期ビュー。 | InitialView プロパティ |
[ファイルの種類] ボックス | ファイル フィルタのコレクション。 | Add メソッド (FileDialogFilters コレクション) |
[開く] ボタン | "操作ボタン" のテキスト。 | ButtonName プロパティ |
では、ファイル ダイアログ ボックスにアクセスするために、FileDialog オブジェクト モデルを調べてみましょう。
FileDialog オブジェクト モデルの調査
ファイル ダイアログ ボックスにアクセスするためにオブジェクト モデルを理解できるように、図 2 に FileDialog オブジェクト モデルのコレクションとオブジェクトのグラフィック表現を示します。さらに、表 3 でオブジェクト モデルの各項目の目的を説明します。
図 2. FileDialog オブジェクト モデル
表 3. FileDialog オブジェクト モデルのオブジェクトとコレクションの説明
オブジェクト/コレクション | 目的 |
FileDialog オブジェクト | 1 つのファイル ダイアログ ボックスを表します。 |
FileDialogFilters コレクション | ファイル ダイアログ ボックスで選択できるファイルの種類のコレクションを表します。 |
FileDialogFilter オブジェクト | ファイル ダイアログ ボックスで選択できる 1 つのファイルの種類を表します。 |
FileDialogSelectedItems コレクション | ファイル ダイアログ ボックスでユーザーが選択したファイルまたはフォルダへのパスのコレクションを表します。 |
これで、ファイル ダイアログ ボックスのグラフィック要素と、これらの要素が FileDialog オブジェクト モデルとどのように関連しているかが理解できたと思います。次に、プログラムからファイル ダイアログ ボックスを使用する方法の例を見てみましょう。
例 : 選択したファイルの連結
この例はダウンロードして参照できます。この例では、複数の Microsoft Word ファイルを連結して 1 つの Word ファイルにするために、 [ファイル選択] および [名前を付けて保存] ファイル ダイアログ ボックスを使ってプログラミングする方法を示しています。
この例では、独自の BuildFileDialogBox
関数を使用して、タイトル、初期パスまたはファイル名、初期ビュー、および操作ボタンのキャプションなどのファイル ダイアログ ボックスのユーザー インターフェイス要素を 1 行のコードでカスタマイズしています。この方法は、ファイル ダイアログ ボックスをカスタマイズするたびにハードコードされたプロパティ設定の長いリストを繰り返し設定するよりは好ましい方法です。次の例では、dlgFileDialogBox
というオブジェクト名を持つファイル ダイアログ ボックスに対して、タイトルとして "Select Files"、初期パスとしてドライブ C、初期ビューとして縮小表示、操作ボタンのキャプションとして "Get Files" を指定し、複数ファイル選択を許可する設定をすべて 1 行のコードで行います。
Call BuildFileDialogBox(dlgFileDialogBox:=dlgFileDialogBox, _
strCaption:="Select Files", _
strInitialFile:="C:\", _
msoDialogView:=MsoFileDialogViewThumbnail, _
strButtonCaption:="Get Files", _
blnMultipleFiles:=True)
ファイル ダイアログ ボックスを作成するときに、既定のファイル フィルタの設定を置き換えるために、1 つ以上の独自の説明文字列とファイル拡張子文字列の配列を使用できます。この例では、ユーザーに Word 文書だけを選択させたいので、文字列 "Word Documents (*.doc)" だけを表示して、[ファイルの種類] ボックスでの選択を制限する必要があります。これらの独自の文字列をスプレッドシートやデータベースに格納するとこの種のソリューションは複雑になりすぎるので、これらの独自の文字列を構成するパラメータ配列を独自の BuildFilters
関数に渡すことにしました。この関数は、ファイル ダイアログ ボックスから既存のファイル フィルタを消去し、FileDialogFilters コレクションの Add メソッドを使って、ファイル ダイアログ ボックスのファイル フィルタとして独自の文字列の配列を挿入しています。ただし、1 つのファイル フィルタだけを追加する場合は、以下のコードを使用できます。
Application.FileDialog(FileDialogType:=msoFileDialogOpen).Filters.Add _
Description:="Word Documents (*.doc)", _
Extensions:="*.doc"
ファイル ダイアログ ボックスを表示した後は、通常ユーザーが ([開く] または [保存] などの) "操作" ボタンを選択したかどうかを確認します。それ以外の操作が行われた場合は、ファイル ダイアログ ボックスでの操作をそれ以上行わず終了します。Show メソッドは、操作ボタンが選択された場合は値 –1 を返し、[キャンセル] ボタンが選択された場合は値 0 を返します。したがって、[キャンセル] ボタンが選択された場合のコードは次のようになるでしょう。
If dlgSaveAsDialogBox.Show = 0 Then
Exit Sub
Else
' "操作" ボタンがクリックされた場合のコード...
End If
ソリューションの中心部は、独自の ConcatenateWordFiles
関数にあります。新しい Word 文書が作成された後、コードは ([ファイル選択] ファイル ダイアログ ボックスで選択されたファイルを持つ FileDialogSelectedItems コレクションを使用して) 選択された Word 文書全体を繰り返し処理します。これは、ユーザーが選択した各ファイルにアクセスする便利な手法です。コードは FileDialogSelectedItems コレクションを使用して各ファイルの内容をクリップボードにコピーし、その後クリップボードから新しい Word 文書の最後にその内容を追加します。
最後に FileConcatenator
サブルーチンに制御が戻り、このサブルーチンで Execute メソッドを [名前を付けて保存] ダイアログ ボックスと連携して使用し、ユーザーが指定するファイル名とパスで新しい Word 文書を保存します。
まとめ
FileDialog オブジェクト モデルは、Common Dialog ActiveX コントロールや Windows API を必要としないで、[ファイルを開く]、[名前を付けて保存]、[ファイル選択]、[フォルダ選択] ファイル ダイアログ ボックスを操作する簡単な方法を提供します。カスタム アプリケーションでより詳細な処理を行うために、FileDialogSelectedItems コレクションを使用して、選択したファイルのリストやフォルダ パスを取得できます。さらに、以前は Office VBA コードからアクセスできなかった多くのファイル ダイアログ ボックス要素 (キャプション、ビュー、開始パス、ファイル拡張子など) をプログラムからカスタマイズできるようになりました。