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のアクションが完了するまで、コードが処理されないことを保証するために何かできますか?
問題が見つかりました。私が投稿しなかったコードが原因だった。 'workbooks.open'と' workbook.close'の呼び出しは 'getData'の内部で実際に起こります。ここでは、ブックを閉じずに' getData'を終了するif-then節があります。私は 'exit関数'の前に 'workbook.close'を追加しましたが、今は正しく動作しています。コードを現状で掲載しないと申し訳ありませんが、簡略化すればヘルプを得る方が簡単だと思いました。次回はよく分かるよ。 – sigil
Sigilは回答を投稿し、それを受け入れたとマークする必要があります。彼らはまだ活発なメンバーであるように見えます。 – JackOrangeLantern