VBA不会closures以编程方式打开的工作簿

我已经在Excel电子表格中编写了一个VBAmacros,该macros将打开特定位置的所有工作簿,并从这些工作簿中提取数据并validation并将其复制到活动工作簿。 然后打开目录中的下一个工作簿并重复该过程,直到目录中的所有文件都已被读取。

一切正常,但我似乎无法得到打开目标工作簿closures。 这包括closuresExcel。 我必须杀死任务pipe理器或PowerShell中的进程,从系统内存中释放工作簿。

Set fs = CreateObject("Scripting.FileSystemObject") strExcelFileName = Dir(ThisWorkbook.Path & "\Certs\*.xls", vbNormal) Set xlApp = CreateObject("Excel.Application") Do While (strExcelFileName <> "") xlApp.Workbooks.Open (ThisWorkbook.Path & "\Certs\" + strExcelFileName) 'code to run for each workbook opened ***xlApp.Workbooks.Close*** 'when present, Excel freezes strExcelFileName = Dir 'next file in directory Loop 

当xlApp.Workbooks.Close行出现并在程序中调用时,excel每次都会冻结。 没有它,我可以运行3-5个工作簿,然后系统不堪重负。 然后,我必须杀死这些进程,移出这些文件,再移动3个文件并重复,直到所有文件都以这种方式处理完毕。 需要一个半小时才能通过50个。

我正在尝试做的是在打开下一个数据之前从工作簿中获取数据。

 ActiveWorkbook.Close 

这将尝试closuresmacros正在运行的工作簿,而不是已打开的工作簿进行读取。

你已经打开了Excel,所以你不需要打开另一个副本。 尝试:

 Set WBookOther = Workbooks.Open(PathCrnt & FileNameCrnt) : : WBookOther.Close SaveChanges:=False 

这个先前的答案,我的循环虽然在当前文件夹中的每个工作簿可能会有所帮助。

我运行你的代码没有任何问题,但这是一个更清洁的select:

 Dim strExcelFileName As String Dim xlApp As Object Dim wbk As Workbook strExcelFileName = Dir(ThisWorkbook.Path & "\Certs\*.xls", vbNormal) Set xlApp = CreateObject("Excel.Application") Do While (strExcelFileName <> "") Set wbk = xlApp.Workbooks.Open(ThisWorkbook.Path & "\Certs\" _ + strExcelFileName) ' set a reference to the workbook you're opening 'code to run for each workbook opened 'Your code should use the "wbk" reference to make sure ' you're accessing the correct workbook. wbk.Close ' close the workbook using the reference you set earlier strExcelFileName = Dir 'next file in directory Loop