使用Access 2010,WinXP。我試圖遍歷一組文件夾,從每個文件夾中的每個Excel文件中收集值以添加到我的數據庫中的表中。問題是,即使我每一次關閉工作簿,它不能被關閉速度不夠快,因爲如果相同的文件名出現在連續的兩個文件夾中,我得到一個錯誤信息:如何等待Workbook.Close完成?
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
我試圖退出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
,但只有結束了開幕一大堆Excel實例沒有退出,就像它崩潰時一樣,我檢查了任務管理器,發現大約30個Excel實例。
是否還有別的方法可以保證我的代碼不會繼續執行,直到由.Close
或.Quit
觸發的Excel操作完成?
我發現了這個問題。這是由於我沒有發佈一段代碼;對'workbooks.open'和'workbook.close'的調用實際發生在'getData'內部,其中有一個if-then子句在不關閉工作簿的情況下退出'getData'。我在'exit function'之前添加了一個'workbook.close',它現在運行正常。對不起,我沒有發佈代碼,我認爲如果我簡化它會更容易得到幫助。下次我會更好地瞭解。 – sigil
Sigil需要發佈他們的答案並將其標記爲已接受。看起來他們仍然是一個活躍的成員。 – JackOrangeLantern