2013-11-22 80 views
2

我想循環訪問Excel中的工作表,並保持結束與excel的非限定參考。訪問VBA創建不合格的參考,而循環通過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等,但仍最終在任務mananger一個EXCEL.EXE進程。這個問題在每個循環中都有定義。如果我在那之前關閉,那很好。

+0

excel文件是否成功打開? ExcelWorkbook.worksheets.count的價值是什麼? – SeanC

+0

您不需要使用ExcelApp循環。 –

+0

是的,它打開。值爲8. – user3022724

回答

0

看起來你正在關閉excel工作簿,但不是excel本身。如果你嘗試過類似

ExcelApp.Close 
+0

對象不支持此屬性或方法錯誤。 – user3022724

+0

會'ExcelApp.Quit'做任何事嗎? – guitarthrower

0

更改此:

i = i + 1 

這樣:

ExcelWorkSheet.Activate 
+0

不,還是有實例運行。 – user3022724

0

在VBA即使你設置你的對象Nothing,資源是不是忠實地直到變量超出範圍,在這種情況下,這是你的子/函數的結束。您可以從另一個子或函數內調用此代碼,只要excel應用程序在超出範圍時在本地聲明,它將從正在運行的進程中刪除。

Eric Lippert's blog有一個條目解釋了原因。

+0

不,還是有實例運行。 – user3022724

+0

這似乎不尋常。循環內是否有其他代碼?它只是在「我=我+我」裏面做的嗎? – Sam

+0

在我的實際程序中,我有很多代碼。但是,試圖找出我只運行上述問題。 – user3022724