我正在尝试在Access中循环访问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等移动资格,但仍然在任务管理器中结束了那个excel.exe进程。这个问题绝对是针对每个循环的。如果我在那之前关闭,那就很好。
答案 0 :(得分:0)
看起来你正在关闭excel工作簿,但并不优秀。如果您尝试了类似
的内容,该怎么办?ExcelApp.Close
答案 1 :(得分:0)
改变这个:
i = i + 1
到此:
ExcelWorkSheet.Activate
答案 2 :(得分:0)
在VBA中,即使将对象设置为Nothing
,在变量超出范围之前,资源也不会真正释放,在这种情况下,这是子/函数的结束。您可以从另一个子或函数内部调用此代码,只要excel应用程序在超出范围时在本地声明,它将从正在运行的进程中删除。
Eric Lippert's blog中有一个条目可以解释原因。