在循环访问Excel工作表时访问VBA创建不合格的引用

时间:2013-11-22 17:33:26

标签: excel vba

我正在尝试在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进程。这个问题绝对是针对每个循环的。如果我在那之前关闭,那就很好。

3 个答案:

答案 0 :(得分:0)

看起来你正在关闭excel工作簿,但并不优秀。如果您尝试了类似

的内容,该怎么办?
ExcelApp.Close

答案 1 :(得分:0)

改变这个:

i = i + 1

到此:

ExcelWorkSheet.Activate

答案 2 :(得分:0)

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

Eric Lippert's blog中有一个条目可以解释原因。