2012-05-05 26 views
2

Access 2010を使用して、WinXP。私はフォルダのコレクションを繰り返し、各フォルダ内の各Excelファイルから値を収集して、自分のデータベースのテーブルに追加しようとしています。Workbook.Closeが終了するまでの待機方法

Run-time error '1004': 
A document with the name 'someWorkbook.xls' is already open. 

はここに私のコードです:問題は、私は、ブックを毎回閉じてるにもかかわらず、それは同じファイル名を2つの連続したフォルダに表示されている場合、私はエラーメッセージが表示されますので、十分に速く閉じてはならないことです:

sub traverse() 

Dim fso As filesystemobject 
Dim fObj As File 
Dim fldObj As Folder 
Dim fCol As Files 
Dim xlApp As Excel.Application 
dim xlBk as Excel.Workbook 

Set xlApp = New Excel.Application 
Set fso = New filesystemobject 
For Each fldObj In fso.GetFolder("c:\basePath").SubFolders 
    Set fCol = fldObj.Files 
    For Each fObj In fCol 
     If UCase(Left(fso.GetExtensionName(fObj.Name), 3)) = "XLS" Then 
      Set xlBk=xlApp.workbooks.open(fObj.path) 
      getData(xlBk) 
      xlBk.close false 
      DoEvents 
     End If 
    Next 
Next 

End Sub 

次のように私は、Excelのインスタンスを終了し、For Each fObjループで新しいものを始めてみました:

set xlApp=new Excel.Application 
Set xlBk=xlApp.workbooks.open(fObj.path) 
getData(xlBk) 
xlBk.close false 
DoEvents 
xlApp.quit 
DoEvents 

だけ開口部を終わったことを私はタスクマネージャをチェックし、約30のExcelインスタンスを発見した。

.Closeまたは.QuitによってトリガされたExcelのアクションが完了するまで、コードが処理されないことを保証するために何かできますか?

+2

問題が見つかりました。私が投稿しなかったコードが原因だった。 'workbooks.open'と' workbook.close'の呼び出しは 'getData'の内部で実際に起こります。ここでは、ブックを閉じずに' getData'を終了するif-then節があります。私は 'exit関数'の前に 'workbook.close'を追加しましたが、今は正しく動作しています。コードを現状で掲載しないと申し訳ありませんが、簡略化すればヘルプを得る方が簡単だと思いました。次回はよく分かるよ。 – sigil

+0

Sigilは回答を投稿し、それを受け入れたとマークする必要があります。彼らはまだ活発なメンバーであるように見えます。 – JackOrangeLantern

答えて

1

@sigilコメントで彼自身の質問に答えました。

問題が見つかりました。私が投稿しなかったコードが原因だった。 workbooks.openとworkbook.closeの呼び出しは実際にgetDataの内部で行われます。ここでは、ブックを閉じることなくgetDataを終了するif-then節があります。私はexit関数の前にworkbook.closeを追加しました。そして、今正しく動作しています。コードを現状で掲載しないと申し訳ありませんが、簡略化すればヘルプを得る方が簡単だと思いました。次回はよく分かるよ。

関連する問題