我在一个 Excel 电子表格中编写了一个 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
这会尝试关闭运行宏的工作簿,而不是关闭已打开以供读取的工作簿。