2016-06-20 16 views
1

vbaのファイルを「earmark」する方法はありますか?私のコードは、一連のフォルダに入り、マスターデータベースにあるすべてのファイル(Excel)からデータをインポートします。操作の中で最も時間のかかる部分はファイルを開くことです - 現在、インポート後にファイル名に接頭辞を追加しています。コードはこの接頭辞を検索し、次のインポートサイクルでファイルをスキップします。VBA経由でExcelファイルを読み込む

ファイルをマークする方法がよりエレガントで、フロントエンドでは見えないため、VBAは完全なファイルを最初に開くことなく認識することができますか?

EDIT:わかりやすくするために、ファイル名が読み込まれ、接頭辞(I_)が付いているファイルは処理されません。私は、ファイルの位置やファイル名を変更せずにファイルをマークする方法を探しています。これは、データベースの他のユーザーが直ちに知ることのできないプロパティです。このマークは、コードが終了した後、同じファイルが後でもう一度チェックされ、おそらくは更新コードを実行している複数のマシンからチェックされた後も持続する必要があります。

処理されたファイルのデータベースを保持することはできません。数千も増えています。そのリストとの比較は、以前に実行されたかどうかに関係なく、ファイルを開いて処理するよりも時間がかかります。

処理されたファイルの配列は保持されません。私は同じファイルを1回の処理で複数回処理するのではなく、コードを一度だけでなく実行するたびに処理するか、ファイル名を変更してください。後者は良い解決策ではありません。私は他の人やプログラムから参照される何千ものファイルの名前を変更したくありません。

+1

すでにインポートされているデータベースのファイルのログを保存できませんでしたか?または、ファイルを「完成したインポート」フォルダなどに移動しますか?ファイル名を確認するためにファイルを開いているのはなぜですか?ファイルを開く前にファイル名を確認して、接頭辞がある場合は開きませんか? – OpiesDad

+0

ファイルを「処理済み」フォルダに移動しますか? – bated

+1

ファイル名を取得するためにファイルを開くのはなぜですか? **ファイルを開く前にファイル名を確認するようにコードを修正してください。それはかなり速いでしょう。 – JNevill

答えて

0

少数のファイルでは、各ファイル名が既に配列内に存在するかどうかチェックされた後、処理されるごとに配列に各ファイル名を追加します。ファイルの数が多い場合は

If IsInArray(FileName, ProcessedFilesArray) Then 

    'You processing code here 

    'Add item to array when processed 
    ReDim Preserve ProcessedFilesArray(1 To UBound(ProcessedFilesArray) + 1) As Variant 
    ProcessedFilesArray (UBound(ProcessedFilesArray)) = FileName 

End If 

Function IsInArray(FileToBeFound As String, arr As Variant) As Boolean 
    IsInArray = (UBound(Filter(arr, FileToBeFound)) > -1) 
End Function 

、私は、処理されたファイルのために現在のフォルダ内のフォルダを作成しますが、それぞれを移動し、すべてが行われたときに再びそれらを移動したいです。

関連する問題