VB6.0程序调用Excel后,Excel进程无法关闭

调用过之后Excel依然残留在任务管理器中,即使把程序关闭也还在,Quit、Close和set nothing等都有,但就是无法关闭进程,为了排除其他嫌疑,现在程序里只剩下下面几行代码了,但Excel.exe总是要手动才能关闭,不然的话第二次运行程序就会出现第二个Excel进程。代码如下,希望有知道的朋友帮忙看看,谢谢
Dim iExcel As Excel.Application
Dim iBook As Excel.Workbook
Dim iSheet As Excel.Worksheet

Set iExcel = CreateObject("Excel.Application")
Set iBook = iExcel.Workbooks.Open(PathStr & "Setting.xls")
Set iSheet = iBook.Worksheets("Sheet1")

iBook.Close
iExcel.Quit
Set iSheet = Nothing
Set iBook = Nothing
Set iExcel = Nothing

你使用这一段 我一直用都没问题
另外 提醒你一下

注意检查 表格是不是别人先打开你才打开的

这时候是只读方式的时候 你如何判断???

处理好就可以了

再加一句:。。。。 如果你在中间出错的话 没关闭是很正常的 请自己手动从进程里删除

'=======打开远程表格(计划1)开始===============
Set ExcelApp = CreateObject("Excel.Application") '创建EXCEL对象
Set ExcelBook = ExcelApp.Workbooks.Open("y:\计划1.xls")
Set ExcelSheet = ExcelBook.Worksheets("计划1")
'=======打开远程表格(计划1)结束===============

'=======保存并关闭远程表格(计划1)开始==========
ExcelBook.Save
ExcelBook.Close
Set ExcelSheet = Nothing
Set ExcelBook = Nothing
Set ExcelApp = Nothing
'=======保存并关闭远程表格(计划1)结束=========
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-28
试试
iExcel.Quit False
很可能是Excel卡在保存对话框那里了,如果Excel窗口可见,应该可以看到弹出这个对话框.追问

谢谢,您说的这个还是不可以的。关键是,程序里面就只有上面那几行代码,只是打开读取了一下,读取完之后就Quit,怎么会关闭不掉这个进程呢?

追答

看看有没有On Error语句,如果有,先注释掉,有可能是发生错误,但是没有中断.
如果Excel是不可见的,可以试试加 iExcel.Visible = True 使其可见,这样如果有对话框就能看得到.
像你这样的问题靠猜是不容易猜到原因的,只有细心一点调试.我曾在调用Word时遇到类似的问题,都是因为在退出前会有一个提示保存的对话框.

追问

没有on error语句,form load里面全部代码就是上面那些,另外也试了您说的把excel设置成visible,然后单步执行的话,确实可以看到Excel的工作簿等被关闭,执行到最后Excel也的确被关闭了,没有任何提示对话框,但是进程里面依然还是有Excel.exe

追答

那会不会是之前运行时残留的进程呢? 在你创建iExcel对象之后,是应该有一个Excel的进程,你可以单步运行时,看一下该进程的PID,在执行过Quit方法之后,该进程应该可以自行结束,也就是不会再有该PID的进程了,如果你发现还有Excel,但PID不是创建iExcel时的那个,应该就是残存的,或是其它过程创建的.

追问

不是之前残存的,每运行一次我都把之前残留的进程手动关掉了。而且也没有其他地方调用Excel,因为所有的代码就是上面那些。另外单步执行观察Excel进程的PID,确实是本次运行没有关闭的。(PS:奇怪的一点是,单步运行的时候,在iExcel.Quit 之前,如果手动关闭Excel表格的话,进程里面就没有了,但是如果用iExcel.Quit来关闭的话,就会残留)

追答

这个很难解释了,现在没有环境,没办法调试.猜是猜不到原因了.试试只创建,退出,释放Excel对象,不要打开文件,看看能不能正常退出.有可能是你在Quit之前没有释放Sheet和Book对象的原因吧.

本回答被网友采纳
第2个回答  2012-09-28
我的以下下代码能正常结束Excel进程
Option Explicit
Dim iExcel As Excel.Application
Dim iBook As Excel.Workbook
Dim iSheet As Excel.Worksheet

Private Sub Command1_Click()
Set iExcel = CreateObject("Excel.Application")
Set iBook = iExcel.Workbooks.Open(App.Path & "\Setting.xls")
Set iSheet = iBook.Worksheets("Sheet1")
lblA1.Caption = iSheet.Cells(1, 1).Value
lblB1.Caption = iSheet.Cells(1, 2).Value
lblC1.Caption = iSheet.Cells(1, 3).Value
lblD1.Caption = iSheet.Cells(1, 4).Value
lblE1.Caption = iSheet.Cells(1, 5).Value
lblF1.Caption = iSheet.Cells(1, 6).Value
lblA2.Caption = iSheet.Cells(2, 1).Value
lblB2.Caption = iSheet.Cells(2, 2).Value
lblC2.Caption = iSheet.Cells(2, 3).Value
lblD2.Caption = iSheet.Cells(2, 4).Value
lblE2.Caption = iSheet.Cells(2, 5).Value
lblF2.Caption = iSheet.Cells(2, 6).Value
lblA3.Caption = iSheet.Cells(3, 1).Value
lblB3.Caption = iSheet.Cells(3, 2).Value
lblC3.Caption = iSheet.Cells(3, 3).Value
lblD3.Caption = iSheet.Cells(3, 4).Value
lblE3.Caption = iSheet.Cells(3, 5).Value
lblF3.Caption = iSheet.Cells(3, 6).Value
iBook.Close
iExcel.Quit
Set iSheet = Nothing
Set iBook = Nothing
Set iExcel = Nothing

End Sub追问

感谢您的回答!我昨天把我上面那段代码从公司拷回去在自己的电脑上试了一下,Excel进程也是可以正常关闭的。今天早上再来公司试,还是关不了,程序是直接拷贝的,完全一样,电脑系统都是Win7,Office都是2007,全都一样,可是为什么在办公室的电脑上这个进程就不能关掉呢?

追答

惭愧:我的是Office2003 。是不是2007版本较新。而VB6则是老古董啊。不得而知

相似回答