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

时间:2012-04-04 13:32:48

标签: excel vba

我在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

这会尝试关闭运行宏的工作簿,而不是已打开以供读取的工作簿。

2 个答案:

答案 0 :(得分:4)

您已打开Excel,因此无需打开其他副本。尝试:

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

这个循环通过当前文件夹中每个工作簿的earlier answer of mine可能会有所帮助。

答案 1 :(得分:3)

我没有任何问题地运行你的代码,但这里有一个更清晰的选择:

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
相关问题