一,、問題: 使用如下代碼打開,、取值及關閉excel:
Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet
Set xlApp = New Excel.Application '連接EXCEL程序,或是用Set xlApp = CreateObject("Excel.Application") xlApp.DisplayAlerts = False Set xlBook = xlApp.Workbooks.Open(excelFile) '打開EXCEL文件 Set xlSheet = xlBook.Sheets(1) '打開第一頁(sheet) strCardNo = Trim(xlSheet.Cells(2, 3)) '示例,,取第2行的第3列,,即C2單元格的值 '進行其他的處理 '...... '處理完成
xlBook.Close '關閉文件 Set xlBook = Nothing xlApp.Quit '關閉Excel Set xlApp = Nothing
代碼執(zhí)行完成以后,會發(fā)現(xiàn)在任務管理器中,,excel進程仍然存在,,而且通過這個方法打開的excel文件,無法再在windows的文件夾里通過雙擊打開了,。 二,、調試分析 將中間取值及處理的所有代碼屏蔽,只執(zhí)行打開及關閉部分的代碼,,會發(fā)現(xiàn)代碼執(zhí)行完成以后,,excel成功地關閉了,因此,,問題應該出在對excel文件的處理中,。按照面向對象的思路,使用 strCardNo = xlSheet.Cells(2, 3) 取值時,,理論上應該是得到了一個單元格的實例,,而不單單是這個單元格的值,,只是vb在使用strCardNo時,只使用了它的值而已,,因此,,懷疑是因為strCardNo(或是其對應的單元格實例)在使用完成后,沒有得到釋放,,因此,,windows沒有正常關閉excel文件并銷毀excel進程。 三,、解決 但通過在Cells(2, 3)后面使用“.”提示符,,沒有發(fā)現(xiàn)有屬性可以只取得單元格的值。但Excel.Worksheet有另外一個成員Range,,它有一個value屬性,,猜測應該是取值用的,因此將代碼修改如下:
xlApp.DisplayAlerts = False Set xlBook = xlApp.Workbooks.Open(excelFile) '打開EXCEL文件 Set xlSheet = xlBook.Sheets(1) '打開第一頁(sheet) strCardNo = Trim(xlSheet.Range("C2").value) '區(qū)域C2的值 '進行其他的處理 '...... '處理完成
xlBook.Close '關閉文件 Set xlBook = Nothing xlApp.Quit '關閉Excel Set xlApp = Nothing
其中,,打開及處理、關閉的代碼沒有作任何更改,,只是將 strCardNo = Trim(xlSheet.Cells(2, 3)) 改為了 strCardNo = Trim(xlSheet.Range("C2").value)
代碼執(zhí)行完成以后,,excel被正常關閉,excel文件也可以通過雙擊正常打開,。 四,、總結 問題出現(xiàn)后,也從網上查過解決方法,,遇到這種問題的程序員很多,。excel的打開及關閉部分,各人使用的方法都不太一樣,,但好像問題并不是出在這里,,從個人的經歷來看,實際大部分可能應該是在對excel的操縱部分出現(xiàn)的問題,。
原址:http://blog.163.com/shuangfeng_521/blog/static/20017737201422972612657/
|
|