使用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