1. 程式人生 > >VB之操作excel後不能關閉excel程序的原因及解決方法

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時

升級PHP7PHP程式提示錯誤: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