访问VBA创build不合格的参考,而循环通过Excel表

我试图循环访问Excel中的Excel表格,并保持对excel的不合格的引用。

Dim ExcelApp As Excel.Application Dim ExcelWorkbook As Workbook Dim ExcelWorkSheet As Worksheet Dim i As Integer Dim salesfile As String Set ExcelApp = CreateObject("Excel.Application") salesfile = "C:\filename" Set ExcelWorkbook = ExcelApp.Workbooks.Open(salesfile) With ExcelApp With ExcelWorkbook For Each ExcelWorkSheet In .Worksheets i = i + 1 Next ExcelWorkSheet End With End With ExcelWorkbook.Save ExcelWorkbook.Close Set ExcelWorkSheet = Nothing Set ExcelWorkbook = Nothing Set ExcelApp = Nothing 

我尝试过移动资格,使用.quit等,但仍然最终与任务pipe理器中的一个excel.exe进程。 这个问题是在每个循环定义。 如果我在那之前closures,那很好。

看起来你正在closuresexcel工作簿,但不是excel本身。 如果你尝试类似的东西呢?

 ExcelApp.Close 

改变这个:

 i = i + 1 

对此:

 ExcelWorkSheet.Activate 

在VBA中,即使将对象设置为Nothing ,在variables超出范围之前也不会真正释放资源,在这种情况下,这是子/函数的结束。 你可以从另一个子或函数里面调用这个代码,只要excel应用程序在超出范围时被本地声明,它将从正在运行的进程中被删除。

Eric Lippert的博客中有一个入口,解释了原因。