Private Sub Command1_Click()
   Dim xlapp As Object
   Dim hwn1, hwn2 As Long
   Set xlapp = CreateObject("Excel.Application")   '1   ......   Set xlapp = Nothing
End Sub
以上这段代码在执行语句1时会在任务管理器里创建一个进程"Excel.exe",请问如何获得xlapp或是这个进程的句柄并把他关掉,
用什么函数呢

解决方案 »

  1.   

    Private Sub Command1_Click() 
       Dim xlapp As Object 
       Dim hwn1, hwn2 As Long 
       Set xlapp = CreateObject("Excel.Application")   '1    ...... 
       xlapp.visible=true   '加一句看看出现什么问题
       Set xlapp = Nothing 
    End Sub 
      

  2.   

    你创建了Excel.Application对象,这个对象当然要产生一个进程了,要不然你怎么进行操作?在你的Set xlapp = Nothing之前,用
    xlapp.Quit
    关闭它,不用去找什么“句柄”!
      

  3.   

    我明白即使只用Set xlapp = Nothing这一语句也能关闭它,我现在想知道用API函数如何获得xlapp的句柄并用API关闭他我现在做的项目是一个ASP.NET的WEB应用程序,因为用ASP.NET在导出EXCEL表格时在进程管理器里总是会有"EXCEL.EXE"的进程残留,所以我想用VB做一个外部程序来终止EXCEL进程,但是ASP.NET又好象不能使用API函数,所以我以上提问的就是在VB里的程序代码
      

  4.   

    用 FindWindow() 应该可以找到它的句柄。但是:
      你创建了 Excel.Application对象,必然要产生一个 Excel.exe 的进程。你的“后继操作”也要靠这个进程来完成,你为什么要关闭它呢?创建了就立即关闭它,后面依赖于这个进程的操作如何完成?
      

  5.   

    先要用quit方法,然后再nothing
      

  6.   

    楼上:你的方法我早就用了~不行~~chen8013:我就想等到后续操作完成以后把这个进程关掉,现在的情况是我的数据已经正确的导出到EXCEL表格里了,但是那个进程一直残留在管理器里,要是想打开那个表格看一下就得手动的从任务管理器里关闭这个进程才能打开
      

  7.   

    不是简单地 Quit 加 Set Nothing 就可以关闭 Excel,必须按照从小到大的次序将所有 Excel 相关对象进行显式释放:
    释放 Cell 或 Range 对象;
    释放 Sheet 对象;
    关闭 Wookbook 对象、释放 Wookbook 对象;
    xlApp.Quit
    Set xlApp = Nothing
      

  8.   

    7楼说得对,你要注意Excel.Application对象及其子对象的释放顺序。这里有个贴子你也可以看一下,这里也提到类似的问题:
    http://topic.csdn.net/u/20080428/10/feb1984b-2c91-422a-8615-6518e16b7c5a.html