方案一
调用Kill方法,结束进程,居然很多人就这么干了,居然也还有弄不掉的问题。首先,这样不能区分正常打开的Excel和软件调用的Excel,进程名称完全一样。于是要找一个关联的标签或者进程ID,也许能走通。
方案二
垃圾回收,System.GC.Collect()。百度的结论大多是这样,在程序结尾加上。事实上没有用。
奇葩的事情: 如果你把System.GC.Collect()放在程序入口,虽然不能帮你清理这次的Excel.exe,但是下一次运行的时候,会帮你清理掉,也就是说,不会反复运行,产生一堆Excel.exe,但是也不保证只保留一个。
问题分析:
有一个人的分析虽然没有给出解决方案,但是道理似乎有点。
调用Excel对象的过程相当于 复制 Excel A 得到 Excel B ,A为原件,B为调用件。所有Close、Quit方法都是在B
基于此:
方案三
把调用的过程放在线程内,启动System.GC.Collect(),问题完美解决!
Private Sub outputExcel()
'操作EXCel的方法,包括关闭、退出。
End Sub
Private Sub ThreadExcel()
Try
Call outputExcel()
System.GC.Collect()
MsgBox("EXCEL导出完成")
Catch ex As Exception
Finally

2万+

被折叠的 条评论
为什么被折叠?



