1

ディレクトリ内にファイルが存在するかどうかを確認する必要があります。私が考えた 2 つのオプションは、正規表現 ( vbscript.regexp) を使用してファイルが存在するかどうかを判断することです。もう 1 つのオプションは、FileSystemObjectFileExistsメソッドを使用することです。

正規表現を使用することの短所は、ディレクトリ内のすべてのファイルをループして、各ファイル名に対して正規表現をテストする必要があることを意味します。第 2 に、正規表現のアプローチは将来 (正規表現) を維持するのが難しくなる可能性があります。ただし、同じファイルの異なるバージョンが存在する可能性があるため、2 つの正規表現をテストする必要があります。ファイルの 1 つについて、頻繁に変更されるファイル名の説明部分があります (わかりました、それは嘘です - ランダムなサイクルで変更されます)。 .

を使用するFileExistsと、両方のファイルを同時にテストでき、各チェックで返されるブール値に応じて処理を続行できます。これに関連する欠点FileExistsは、ワイルドカード マッチングがサポートされていないことです。そのため、説明付きのファイル名を検討する場合、新しい説明を反映するように常に更新する必要があります = メンテナンスの頭痛の種が増えます。しかし、その方が把握しやすく、変更しやすいです。

ファイル名の形式:

Data_Sheet_<yyyymmdd>_D.xlsx // the normal file
Data_Sheet_<yyyymmdd>_D_<some description>.xlsx // the alternate file

ファイル名の<yyyymmdd>一部は、ファイルが置かれている現在のフォルダーによって決まります。

質問: ファイルを見つけるために、正規表現または単純な FileExists を使用する方が良いでしょうか?

上記のいずれかの方法を Excel vba マクロ内で使用します。

4

1 に答える 1

2

あなたは見ましたDir()か?ワイルドカードを渡すことができますmy*file.pd? おそらくそれは妥協する方法かもしれません. 確かに、正規表現の全機能を利用することはできませんが、ファイルを制限してから、実際に何が存在するかをテストすることができます。

個人的にはFileExists()、ディレクトリをループしてすべてのファイルをテストするのではなく、使用します。ディレクトリがループよりも大きくなると、永遠にかかる可能性があります。ただし、使用Dir()すると、反復する必要があるファイルの数を潜在的に制限できます。PlusFileExists()は正確に 1 行/ステートメントであり、よりクリーンです... ただし、スクリプト ランタイムがプロジェクトに含まれていることを確認する必要があります。

http://techonthenet.com/excel/formulas/dir.php http://www.blueclaw-db.com/listbox-directory.htm http://www.hobbub.com/vba-vb-vsto/iterating- over-a-directory-with-a-dir-loop-loop-through-directory-vb/

2 番目と 3 番目のリンクには、ディレクトリを反復処理するより良い例があります。

于 2010-11-23T09:15:52.340 に答える