Access 2010、WinXP を使用しています。フォルダーのコレクションを反復処理し、各フォルダー内の各 Excel ファイルから値を収集して、データベースのテーブルに追加しようとしています。問題は、ワークブックを毎回閉じている場合でも、十分な速度で閉じる必要がないことです。同じファイル名が 2 つの連続するフォルダーに表示されると、次のエラー メッセージが表示されるためです。
Run-time error '1004':
A document with the name 'someWorkbook.xls' is already open.
これが私のコードです:
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
For Each fObj
次のように、Excel インスタンスを終了し、ループ内で新しいインスタンスを開始しようとしました。
set xlApp=new Excel.Application
Set xlBk=xlApp.workbooks.open(fObj.path)
getData(xlBk)
xlBk.close false
DoEvents
xlApp.quit
DoEvents
しかし、クラッシュしたときにタスクマネージャーを確認したところ、約30個のExcelインスタンスが見つかったため、Excelインスタンスを終了せずに大量に開いただけでした。
.Close
Excel アクションがトリガーされるか完了するまで、コードが続行されないことを保証するために他にできることはあります.Quit
か?