do you have an Excel App object? if yes, tryYourExcelApp.Quit
set YourExcelApp=nothing

解决方案 »

  1.   

    to saucer:
       我没用set object方法,我想知道的是,用上述的open方法,如何释放被引用的excel对象?(close无效)   请各位不吝指教。
      

  2.   

    释放所有新定义的关于xecel的变量
    包括,excelapplication,workbooks,sheet变量
      

  3.   

    各位:谢过先。
    如题所示,在这个工程中,所有代码就此两句,并引用了“excel9.0”,
    c:\中有MyExcel.xls文件,(excel2000)因此,不存在其他任何定义的关于excel的变量(btw,workbooks没有quit属性吧)当open语句执行时,自动调用了excel进程,(excel文件在后台打开,不显示,按ctrl+alt+del显示“excel”进程存在)而close只能关闭该文件,无法将进程关闭,直到应用程序结束。
    带来的问题是,该应用程序打开时,会无法手动打开其他excel文件(如果excel文件在前台打开,显示在屏幕上,就没有这个问题)各位有兴趣可以一试革命尚未成功,高手请继续帮忙理论上谈谈也行
      

  4.   

    saucer(思归) 的处理是正确的EXCELapp没有QUIT 的话,进程认为一直在运行,没有退出,,,
    所以 运行后发现excel对象未被关闭操作EXCEL时最好是使用变量来操作,便于释放
      

  5.   

    声明一个对象ObjectExcel,在退出的时候用:ObjectExcel=Nothing来释放对象变量,从而退出Excel
      

  6.   

    多谢各位
    我也知道声明excelApp来的干脆利落,不过为何open-close方法就不行,一日不明,便心中不快,死不瞑目啊 :)继续中
      

  7.   

    EXCEL在打开WORKBOOK时是默认调用EXCEL平台,实际上已经存在了EXCELAPP,只不过是系统调用的,而你没有声明该对象,所以你不能关闭该对象;而如果你先引用了EXCELAPP对象,你就可以调用EXCELAPP对象(只是为了在你程序中方便而已)来打开WORKBOOK,你就可以用EXCELAPP关掉它。
    不过你还是可以用下面方法关掉它:
    Public Declare Function ShellExecute Lib "shell32" _
       Alias "ShellExecuteA" _
      (ByVal hwnd As Long, _
       ByVal lpOperation As String, _
       ByVal lpFile As String, _
       ByVal lpParameters As String, _
       ByVal lpDirectory As String, 
       ByVal nShowCmd As Long) As LongCall ShellExecute Me.hWnd,"close","excel.exe",0,"pathexcel *"pathexcel 是你的系统中EXCEL所在的目录
      

  8.   

    上面说的非常有道理啊用API函数吧,
    在你的系统退出的时候,先检测是否有Excel进程,如果有关闭好了。
      

  9.   

    谢谢cngxylyh与各位朋友,我想API是个方法
    不过我对API了解不多,上面那一句ShellExecute, 写成Call ShellExecute(Me.hwnd, "close", "excel.exe", 0, "C:\Program Files\Microsoft Office\Office",SW-HIDE)可在SW-HIDE处,出错“变量未定义”
    我查了一下书,nShowCmd参数应有SW_SHOW,SW_JIDE...选项的
    为何错?请指教
      

  10.   

    在API里面,参数是要变成数字来引用的,你看到别人在引用API时带有字符,那是因为人家在前面就已经作了常量定义。这样的作法是方便记忆和检查。
    你明明看到我上面的函数声明“ ByVal nShowCmd As Long”,你用字符来当然出错了。sw_hide 对应的好象是4。你把它改为4看看。
      

  11.   

    通过了,谢
    不过,还是没有解决问题,按ctrl+alt+del “excel”仍然存在还有其他方法么?节后结贴
      

  12.   

    你的workbooks究竟是什么东西????????
      

  13.   

    excel工作簿对象
     .open实际是vba方法
      

  14.   

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
        ByVal lpWindowName As Long) As Long
    sub shutdownexcel()
    Dim Running As Excel.Application
    Dim Openning As Excel.Workbook
    Dim hWnd As LonghWnd = FindWindow("XLMAIN", 0)
    If hWnd = 0 Then   '0 表示没有 Excel 在运行。
        Exit Sub
    Else
        Set Running = GetObject(, "Excel.Application")
        For Each Openning In Running.Workbooks
            Openning.Saved = True
        Next
        Running.Quit
    End If
    Set Running = Nothing
    end sub
      

  15.   

    试了,遗憾,无效
    感谢,清再帮忙想想有没有对付进程的API?
      

  16.   

    Private Sub Command1_Click()
       Workbooks.Open FileName:="C:\MyExcel.xls"
       Workbooks.Close
    End Sub可以用kill ("C:\MyExcel.xls")关闭呀
      

  17.   

    kill的定义是Deletes files from a disk
    只删文件,不杀进程(sql server除外)
    没用呀
      

  18.   

    定义EXCEL.APPLICATION对象
    该对象的WORKBOOK.OPEN 文件名
    操作……
    要退出就让这个对象QUIT 
    然后SET 对象=NOTHING
      

  19.   

    这样程序就完全退出了 你可以让EXCEL.APPLICATION对象可视
    使用EXCEL.APPLICATION.VISIBALE=TRUE就行了
      

  20.   

    你的问题是只关闭了工作薄,没有关闭excel的application,所以excel还开着。
    只是这个excel没有打开任何文件罢了。
    EXCEL在打开WORKBOOK时是默认调用EXCEL平台,实际上已经存在了EXCELAPP,只不过是系统调用的,而你没有声明该对象,所以你不能关闭该对象;而如果你先引用了EXCELAPP对象,你就可以调用EXCELAPP对象.
      

  21.   

    SHELLEXECUTE应该可以的呀,你看一下返回结果。
    0:不成功
    非0:成功
    实在不行的话就找出EXCEL的句柄,用CLOSEHANDLE干掉它。
      

  22.   

    使用API好了
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPublic Const SW_MAXIMIZE = 3你的代码修改为:
     ShellExecute 0, "open", "C:\MyExcel.xls", "", "", SW_MAXIMIZE这样关闭EXCEL文件的同时,也会结束进程
      

  23.   

    以上均无效,憾
    能得到hWnd = FindWindow("XLMAIN", 0)的值
    用CLOSEHANDLE(hwnd)也没法关闭
    一小时后结贴
      

  24.   

    是得到该进程的ID,不是窗口的ID。CLOSEHANDLE要关掉的是进程或线程,不是窗体。关闭窗体是用SENDMESSAGE(HWND,&H10,0,0).