2011-08-23 180 views
3

假設我在Access中有一些使用excel的VBA代碼,無論出於何種原因。有時我無法正確關閉文件。VBA關閉Excel文件

的代碼(我認爲)應該看起來有點像這樣:

WBO.Close savechanges:=True 
Set WBO = Nothing 

XLO.Application.Quit 
Set XLO = Nothing 

rs.Close 
db.Close 

這裏XLO是Excel對象,WBO是一個工作簿對象中,RS是DAO記錄和DB是一個DAO數據庫。即使物理excel文件關閉,我的系統上仍然存在「EXCEL.EXE」進程,這阻止了我連續運行兩次程序。有誰知道爲什麼發生這種情況?

編輯

我拿出rs.Close然後db.Close線,因爲我決定手動從Access到Excel導出我所用的數據(有超過有效太多的行和列,每個單元格複製)。但是,這並沒有改變手頭的問題。

謝謝

傑西Smothermon

+2

你是如何聲明XLO的?你如何啓動Excel實例? – Banjoe

+2

確保您按照與創建方式完全相反的順序關閉並設置爲Nothing。確保你之後沒有任何剩餘的工作簿引用;比如對工作表的散列引用或任何範圍。 – transistor1

+0

'XLO.Quit'是要走的路。 –

回答

3

沒有實際Excel對象。 Application是頂級對象,但Application對象具有Application屬性,該屬性實際上指向「指定對象的創建者」。所以試圖退出XLO.Application不會做你認爲應該的。

。假定XLOExcel.Application類型,然後嘗試只是代替XLO.QuitXLO.Application.Quit

+0

我通常會執行'XLO.Quit'以及;然而,技術上不是'XLO.Application.Quit'是同樣的事情嗎?如果我執行'Debug.Print xlo是xlo.Application',我會得到'True'作爲響應;這意味着xlo與'xlo.Application'是同一個對象。 – transistor1

+0

XLO是一個Excel.Application,但是XLO.Quit似乎沒有完全關閉所有東西。我忘了提及,當我在Excel項目中遇到錯誤時(因爲我認爲某些參考仍處於打開狀態),並且手動關閉了Excel文件,我可以選擇不保存它。一旦我這樣做,程序運行良好。這使我認爲「WBO.Close savechanges:= True」行有問題,但我不確定。謝謝 –

+0

@ transistor1 - 我相信你是對的。 「Application」屬性似乎適用於OLE對象 – barrowc

0

爲什麼不乾脆:

application.displayalerts = false 
WBO.save (or saveas whatever it matters) 
WBO.close 
set WBO = nothing 

我沒有看到與內存的問題......

0

參考這個答案。
It worked for me.

Dim sKill As String 

sKill = "TASKKILL /F /IM msaccess.exe" 
Shell sKill, vbHide 

如果這樣的作品,標誌着該鏈接的答案用^,不是我的。