VB之操作excel後不能關閉excel程序的原因及解決方法
一、問題:
使用如下程式碼開啟、取值及關閉excel:
Public Function ImportFromExcel(excelFile As String) As Long
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim strCardNo As String
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單元格的值
'進行其他的處理
'......
'處理完成
Set xlSheet = Nothing '釋放sheet物件
xlBook.Close '關閉檔案
Set xlBook = Nothing
xlApp.Quit '關閉Excel
Set xlApp = Nothing
程式碼執行完成以後,會發現在工作管理員中,excel程序仍然存在,而且通過這個方法開啟的excel檔案,無法再在windows的資料夾裡通過雙擊打開了。
二、除錯分析
將中間取值及處理的所有程式碼遮蔽,只執行開啟及關閉部分的程式碼,會發現程式碼執行完成以後,excel成功地關閉了,因此,問題應該出在對excel檔案的處理中。按照面向物件的思路,使用 strCardNo = xlSheet.Cells(2, 3) 取值時,理論上應該是得到了一個單元格的例項,而不單單是這個單元格的值,只是vb在使用strCardNo時,只使用了它的值而已,因此,懷疑是因為strCardNo(或是其對應的單元格例項)在使用完成後,沒有得到釋放,因此,windows沒有正常關閉excel檔案並銷燬excel程序。
三、解決
但通過在Cells(2, 3)後面使用“.”提示符,沒有發現有屬性可以只取得單元格的值。但Excel.Worksheet有另外一個成員Range,它有一個value屬性,猜測應該是取值用的,因此將程式碼修改如下:
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.Range("C2").value) '區域C2的值
'進行其他的處理
'......
'處理完成
Set xlSheet = Nothing '釋放sheet物件
xlBook.Close '關閉檔案
Set xlBook = Nothing
xlApp.Quit '關閉Excel
Set xlApp = Nothing
其中,開啟及處理、關閉的程式碼沒有作任何更改,只是將
strCardNo = Trim(xlSheet.Cells(2, 3))
改為了
strCardNo = Trim(xlSheet.Range("C2").value)
程式碼執行完成以後,excel被正常關閉,excel檔案也可以通過雙擊正常開啟。
四、總結
問題出現後,也從網上查過解決方法,遇到這種問題的程式設計師很多。excel的開啟及關閉部分,各人使用的方法都不太一樣,但好像問題並不是出在這裡,從個人的經歷來看,實際大部分可能應該是在對excel的操縱部分出現的問題。
相關推薦
VB之操作excel後不能關閉excel程序的原因及解決方法
一、問題: 使用如下程式碼開啟、取值及關閉excel: Public Function ImportFromExcel(excelFile As String) As Long Dim xlApp As Excel.Application Dim xlBook As Ex
WPF 程序無法觸摸操作?我們一起來找原因和解決方法!
line 坐標 團隊 github webkit pro rgba alter 徹底 原文:WPF 程序無法觸摸操作?我們一起來找原因和解決方法! 版權聲明:本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡
COPY到目標源(EXCEL或WPS)丟失記錄BUG及解決方法
資料來源:SQL SERVER或記事本目標源:EXCEL或WPS測試環境--測試1在記事本輸入1 A "2 B 3 C 4 D 複製到EXCEL,結果集顯示:--測試2在記事本輸入1 A Z 2 "B
ssh 免密碼登錄(設置後仍需輸密碼的原因及解決方法)
方法 use gpo 用戶權限 iteye img 寫到 ali clas ssh免密碼登錄的原理: serverA 免密碼登錄到 serverB 機器A 向 機器B 進行免密碼登陸 step1: 在機器A中生成 私鑰和公鑰: ssh-keygen -t rsa
C#調用dll提示"試圖加載格式不正確的程序"原因及解決方法
strong str 調用 http 解決 操作系統 就會 項目設計 utm 轉載:https://blog.csdn.net/songyi160/article/details/51354660 程序在32位操作系統上運行正常,在64位操作系統上運行讀卡功能提示”試圖加載
wordpress更改“固定連結”模式後,頁面出現404原因及解決方法
Nginx 解決方案: 在 /etc/nginx/config.d/mysit.conf檔案的 loction \ {} 中新增 if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; }
無法啟動MYSQL服務,發生系統錯誤1067,程序意外中止原因及解決方法
本人的另外一篇部落格有定位啟動失敗原因的方法,在此基礎上檢視啟動失敗的原因。 https://blog.csdn.net/a1257427517/article/details/84927457 通過檢視日誌,發現 unknown variable 'innodb_checksum
雲伺服器重啟後網站打不開及FTP連不上的原因及解決方法
安裝好CENTOS 6.5 後 並安裝了NGINX+MYSQL+PHP後,設定好網站,訪問正常,但重啟後發現網站打不開了,登入伺服器,測試nginx -t 測試正常,說明服務都正常,後來發現是因為防火牆iptables 的關係,因為Linux防火牆(Iptables)重啟系統生效,所以重
Linux的殭屍程序產生原因及解決方法
來源:http://www.blogdaren.com/post-882.html 1. 產生原因: 在UNIX 系統中,一個程序結束了,但是他的父程序沒有等待(呼叫wait / waitpid)他,那麼他將變成一個殭屍程序。通過ps命令檢視其帶有defunc
ssh 免密碼登入(設定後仍需輸密碼的原因及解決方法)
這篇大部分是拷貝的。按操作步驟操作不行的最可能原因是:檔案許可權,不論是a機還是要訪問的b機的檔案的許可權都要改成對應的700,600;必須嚴格是這個許可權,否則會出現設定免密fail的情況。 ssh免密碼登入的原理: serverA 免密碼登入到 serverB
安裝SQL2005出現伺服器啟動失敗或者安裝後啟動伺服器失敗的原因及解決方法
紀念一下,本人在社群的第一篇部落格,在經歷了兩天無數重複的解答和失敗的嘗試後,終於找到了解決辦法,希望可以幫到其他人,同時表達一下對各社群翻來覆去的無用解答的憤慨。具體安裝過程可以參考郝斌老師的教程。點選開啟連結下面我分享一下我所經歷的失敗:安裝過程中的錯誤:1.安裝SQL時
升級PHP7後PHP程式提示錯誤:operator not supported for strings in原因及解決方法
PHP Fatal error: [] operator not supported for strings in …… 查詢資料後發現是因為以下原因造成的 在對某一個變數進行第二次賦值的時候,也就是在同一頁面內對同一變數第二次賦值,但值的型別前後不一致會導致這
jquery form表單.serialize()序列化後中文亂碼問題原因及解決
有時候我們需要使用ajax提交去提交form的值,這樣就需要使用serialize()去獲取form的值,但這樣獲取的值如果有中文,會亂碼,原因和解決方法如下:原因:.serialize()自動呼叫了encodeURIComponent方法將資料編碼了 解決方法:呼叫deco
“display:block-inline形式的Span或Div中新增文字後,導致Span或Div排版掉落、錯位”的原因及解決方法
在開始用display:inline-block的時候,只知道有baseline這麼一說,而且當時記筆記解決了空隙問題,百度一堆文章,什麼終極解決辦法等等,還記錄了一些問題,當時不明白,到今天才明白verticle-align的用法,原來可以這麼用,以後可以隨便玩inli
easyui form表單.serialize()序列化後中文亂碼問題原因及解決
loginAndRegDialog=$('#loginAndRegDialog').dialog({closable:false,modal:true,buttons:[{text:"登入",handler:function(){var params=$('#LoginIn
MyEclipse匯入專案後有紅色感嘆號的原因及解決方法
MyEclipse中專案出現紅色感嘆號原因是: 專案名稱上的“紅色歎號”說明專案的jar包引入有問題,需要重新引入jar包。 一般有兩種情況: 1.工程中classpath中指向的包路徑錯誤: 解決方法: 《1》在工程上右擊,選擇“Bulid Path”; 《2》選
Eric6安裝後無法執行指令碼的原因及解決方法
eric6 PyQt5安裝後對於python檔案進行了正確的程式設計和正常編譯之後,就應該是執行程式碼了,點開開始->執行指令碼選項卡中卻無論如何不能夠執行指令碼 特徵 開始->執行指令碼 這個按鈕一直顯示為灰色 (選項卡檢測到滑鼠事件才會顯示,所以用手
sublime按分號後自動提示的原因及解決辦法
方法 新建 htm macro html perf browser png -m 解決sublime每次寫完css樣式 分號 ; 後都會有自動提示 這樣很影響效率。出現這個問題的原因是sublimeCodeInetel這個插件。所以再網上收集了兩個方法。 第一個方法:
C#匯出Excel後關閉程序EXCEL.EXE
在C#中使用Microsoft.Office.Interop.Execl 匯出excel 表格時,將以下兩個屬性畝後,在導完後, Excel.exe 程序無法關閉。 // excel app 是否可見app.Visible = false; // app
C#匯出Excel後關閉程序(EXCEL.EXE)釋放資源的解決方案
#region Kill Special Excel Process [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] st