调用了Quit和ReleaseDispatch后,Excel进程仍然存在,直到程序关闭后才退出。
谁又解决方法?

解决方案 »

  1.   

    Excel97,Excel2002,Excel2002并不唤起(raise)一个能被其他进程注意到的退出事件。只有当一个不在同一个进程内的控制着Excel的一个实例的应用程序(下称控制者)释放所有的对象引用的时候,控制者才知道Excel进程已经结束,于是告知Excel退出。但是,如果一个控制者创建了一个Excel实例并使之可见的时候,因为它并不知道终端用户什么时候关闭了Excel,所以只要控制者还没有释放对象引用的时候,Excel就会保持着装载以及在运行对象表(Running Object Table)中的状态。所以出现了您所说的情况。至于这个问题的解决方法,您可以用查找窗口等方法得到该进程的控制权,然后关闭就可以了。如果您需要了解进一步的信息,您可以参看kb文章http://support.microsoft.com/default.aspx?scid=kb;en-us;Q192348。- 微软全球技术中心 VC技术支持本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。为了为您创建更好的讨论环境,请参加我们的用户满意度调查
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
      

  2.   

    谢谢您的解答。我创建的EXCEL实例是不可见的,并且我调用了SetUserControl(false)使用户无法控制。跟据EXCEL开发手册,如果调用SetUserControl(false),则释放所有对象后EXCEL就会退出,但事实并非如此!
    我再说的详细点。我的程序里有两个函数进行EXCEL操作,其中之一是将一些数据导入到EXCEL中,这个函数退出后EXCEL进程也随之正确关闭了。
    另一个函数是将EXCEL中的内容导入到ACCESS数据库中,使用了ADO,而这个函数退出后EXCEL进程却无法退出。在这两个函数中对EXCEL的操作几乎是一样的,不同之处是第一个函数是新建的EXCEL文档,而第二个函数是打开了一个已存在的EXCEL文档。我感觉是跟ADO有关系,还希望能够听听您的解释。
      

  3.   

    不知道这样可不可以?
    Dim xlApp As New Excel.Application()
    Dim wb As Excel.Workbook
    '其他代码
    wb.Saved = True '其间没有调用wb.Save()
    wb.Close()
    xlApp.Quit()
      

  4.   

    可能是office 本身的问题吧
    有时候可以行,但有时出毛病,我也是这样。