SearchFolders コレクションの使用

Paul Cornell
Microsoft Corporation

March 2001

対象 :
   Microsoft® Office XP

概要 : Microsoft Office 10.0 Object Library のメンバである SearchFolders コレクションを使って、プログラム上でファイルを検索する方法を説明します。

MSDN Online Code Center (英語) で ODC_SrchFldrsCol.exe サンプル ファイルを参照またはダウンロードしてください。

目次

はじめに
検索条件を作成するためのオブジェクト モデルの調査
例 : 特定のテキストを持つファイルをフォルダで検索する
まとめ

はじめに

Office 9.0 タイプ ライブラリの FileSearch オブジェクトを使用すると、作成者名、ファイルの種類、ファイルが最後に変更された日付などの条件に一致するファイルをプログラムで検索できます。さらに、既知のフォルダに、またはオプションとしてサブフォルダに検索条件を絞り込むことができます。ただし、パスがわからない場合、そのフォルダを検索する方法はありません。

SearchFolders コレクションが Office 10.0 タイプ ライブラリの FileSearch オブジェクトに追加されたことにより、パスがわからない場合でも、複数のフォルダに含まれているファイルをプログラムで検索できるようになりました。この記事は、新しい SearchFolders コレクションを調査し、Visual Basic® for Applications (VBA) コードを使って Office XP で新しいコレクションを使用する方法の例を提供します。

検索条件を作成するためのオブジェクト モデルの調査

検索条件をプログラムを使って作成する方法をより理解するために、以下の図 1 に使用できるさまざまなコレクションとオブジェクトを示し、表 1 で SearchFolders コレクションの目的とその子オブジェクトを説明します。

図 1. FileSearch オブジェクト モデル

表 1. SearchFolders コレクションとその子オブジェクト

オブジェクト/コレクション 目的
SearchFolders FileSearch オブジェクトを使用して検索されるフォルダのコレクションを表します。アプリケーションごとに 1 つのみの SearchFolders コレクションがあります。1 つ以上の ScopeFolder オブジェクトをこの 1 つの SearchFolders コレクションに追加します。
ScopeFolder 検索に追加するフォルダまたはサブフォルダを表します。各 ScopeFolder オブジェクトは、(サブフォルダのコレクションである) 0 個以上の ScopeFolders オブジェクトを含む可能性があります。ScopeFolder オブジェクトが、付随する子 ScopeFolder オブジェクトの ScopeFolders コレクションを持たない場合、そのフォルダがサブフォルダを持たないことを意味します (ただし、そのフォルダはファイルを含むことはあります)。
ScopeFolders ScopeFolder オブジェクトに属する 1 つ以上のサブフォルダのコレクションを表します。

その他の Search オブジェクト

(上記図 1 の) FileSearch オブジェクトのその他のコレクションおよびオブジェクトの一部には次のものがあります。これらを簡単に説明します。

  • FileTypes コレクション (Office XP に新しく追加)    このコレクションは、検索可能な 1 つ以上のファイルの種類 (Microsoft Excel ファイルまたは Microsoft PowerPoint® ファイルなど) を表します。アプリケーションには 1 つだけ FileTypes コレクションがあります。FileSearch オブジェクトの NewSearch メソッドを呼び出すと、FileTypes コレクションの以前の設定がクリアされます (たとえば、Application.FileSearch.NewSearch)。これは、(Microsoft Outlook® 以外のすべての Office アプリケーションの [ファイル] メニューの [検索] をクリックしてアクセスする) [検索] 作業ウィンドウの [種類] に存在する選択項目と等価です。

  • FoundFiles コレクション    このコレクションは、ファイル検索から返される 0 個以上のファイルを表します。 For Each...Next ループを FoundFiles コレクションで使用して、検索する各ファイルに対してある種の操作 (ファイルを開くまたは印刷するなど) を実行できます。これは、[ファイル] メニューから [検索] をクリックしてアクセスする [検索結果] 作業ウィンドウに存在するファイルの一覧と等価です。FileSearch オブジェクトの Execute メソッドを呼び出すと、ファイルの検索を開始し、FoundFiles コレクションを更新します (たとえば、Application.FileSearch.Execute) 。

  • PropertyTests コレクション    このコレクションは、基本検索に適用される 1 つ以上の高度な検索条件を表します。これは、( [検索] 作業ウィンドウで [高度な検索] をクリックしてアクセスする) [高度な検索] 作業ウィンドウの [検索する文字列] エリアに存在する選択項目と等価です。

  • SearchScopes コレクション (Office XP に新しく追加)    このコレクションは、(マイ コンピュータ、マイ ネットワーク、または Microsoft Outlook など) 検索に使用できるローカルまたはネットワーク上のリソースを表します。 SearchScopes コレクションから SearchScope オブジェクトを追加または削除することはできません。これは、[検索] 作業ウィンドウの [探す場所] ボックスに存在する選択項目と等価です。

上記コレクションのメソッドおよびプロパティに関する詳細については、Microsoft Office XP VBA のヘルプを参照してください。

例 : 特定のテキストを持つファイルをフォルダで検索する

ダウンロードして参照できるこの記事の例は、SearchFolders コレクションがどうのように機能するかを示しています。この例では、ユーザーが Microsoft Word 文書内のいくつかの文字列を選択し、カスタム UserForm を使ってフォルダ名を指定すると、コードはユーザーのローカル コンピュータの、ユーザーが指定したフォルダ名と一致するフォルダ内で、選択されたテキストを持つファイルを検索します。その後、コードはカスタム UserForm を使って一致するファイルの一覧をユーザーにレポートします。

コードがファイルを検索する前に、以前の検索条件をクリアする必要があります。独自の ClearPreviousSearchFolders サブルーチンは、アプリケーション内の唯一の SearchFolders コレクションに残っている SearchFolder オブジェクトを削除することによって、これを行います。さらに、このサブルーチンは、 LookIn プロパティを空の文字列に設定し、NewSearch メソッドを呼び出して、残りのすべての検索条件を既定の設定にリセットします。

ユーザーのコンピュータ内のすべてのフォルダを検索するには、独自の SearchForSubFolders サブルーチンを再帰的に使用します。このサブルーチンを使用しない場合、検索対象はユーザーのコンピュータの最初のレベルのみに制限されます。 SearchForSubFolders サブルーチンは、必要なだけ何回でも自分自身を呼び出し、コンピュータのディレクトリ構造全体をスキャンします。サブルーチンがユーザーが指定したフォルダ名と一致するフォルダを検索するたびに、AddToSearchFolders メソッドを呼び出し、そのフォルダをアプリケーションの唯一の SearchFolders コレクションに追加します。

ユーザーのコンピュータのディレクトリ構造全体がスキャンされた後、コードは SearchFolders コレクションを使って、ユーザーが選択した文字を持つファイルを検索する準備をします。PropertyTests コレクションの LookIn プロパティと Add メソッドと連携する FileSearch オブジェクトの Execute メソッドが、一致したファイルを含む FoundFiles コレクションを返します。一致したファイルは、カスタム UserForm を更新および表示するために、独自の ReportResultsToUser サブルーチンを呼び出すことによってユーザーにレポートされます。

まとめ

SearchFolders コレクションを使用すると、あらかじめパスを知らなくても、複数のフォルダ内のファイルをプログラムで検索できます。さらに、SearchFolders コレクションは FileSearch オブジェクトの一部なので、別の検索条件をプログラムによる検索ソリューションに容易に組み込むことができます。