我已经在Excel电子表格中编写了一个VBA宏,该宏可打开特定位置中的所有工作簿,并从这些工作簿中提取数据并验证并将其复制到活动工作簿。然后打开目录中的下一个工作簿并重复该过程,直到目录中的所有文件都已被读取完毕。VBA不会关闭以编程方式打开的工作簿
一切正常,但我似乎无法得到打开目标工作簿关闭。这包括关闭Excel。我必须杀死任务管理器或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
这会尝试关闭运行宏的工作簿,而不是已打开的工作簿进行读取。
这完美地工作。谢谢 – 2012-04-06 13:03:53