第一个窗口:
有一个按钮,打开一个excel报表文件(包含宏的执行)。
手动关闭此excel文件。
然后再次按这个按扭,可以再次执行此excel文件。
然后再次手动关闭此excel文件。
(可是为何excel.exe一直在内存中存在。)第一个窗口中的另外一个按钮:
打开一个窗口,窗口中的打开excel文件的按钮,无法再打开excel。
(内存中出现两个excel.exe。)为何?如果修改。

解决方案 »

  1.   

    没有释放Excel对象吧?set uExcel = Nothing
      

  2.   

    释放EXCEL对象
    set EXCEL类名=nothing
      

  3.   

    Set Obj_ArgApp = GetObject(, "Excel.Application")
    我用这样打开的。
    释放set Obj_ArgApp = nothing也没反应。
      

  4.   

    先关闭这个创建的对象
    obj_argapp.close
    然后再释放
    set obj_argapp=nothing
      

  5.   

    因为你开了两次,obj_argapp是指向excel对象的指针,将他释放后可以关闭他所指向的excel对象,但由于你又开了一个excel对象,原来的对象既没有被释放,有没有任何指针指向,变成了没人管的孩子了你可以试一下,只开一个的情况下,是否还关不掉。如果是你就考虑换换算法吧
      

  6.   

    Dim XlsApp As Excel.ApplicationSet XlsApp = New Excel.ApplicationXlsApp.Quit
      

  7.   

    Dim Obj_ArgApp  As Excel.Application
            'EXCELopen
            ret = OpenExcelFile(ExcFileName, Obj_ArgApp, strMsg)
            If ret = False Then
                 MsgBox strMsg
            End If
    Public Function OpenExcelFile(strFileName As String, _
                                Obj_ArgApp As Excel.Application, _
                                Msg As String) As Boolean
                                
        Dim xlsBook As Object
        Dim xlsSheet As Object
        
                                    
        On Error Resume Next
        
        Set Obj_ArgApp = GetObject(, "Excel.Application")
        If Err.Number <> 0 Then
           Set Obj_ArgApp = CreateObject("Excel.Application")
           Obj_ArgApp.Application.Visible = True
           Err.Clear
        End If
        
        Obj_ArgApp.ScreenUpdating = True
        Obj_ArgApp.Visible = True
        Obj_ArgApp.DisplayAlerts = True    Workbooks.Open FileName:=strFileName
        If Err.Number <> 0 Then
           Msg = "err!!" & Chr(13) & Str(Err.Number) & "  " & Err.Description
           OpenExcelFile = False
           Exit Function
        Else
           ActiveWorkbook.RunAutoMacros (xlAutoOpen)
           If Err.Number <> 0 Then
              Msg = "err!!" & Chr(13) & Str(Err.Number) & "  " & Err.Description
              OpenExcelFile = False
              Exit Function
           End If
        End If
      

  8.   

    你要先使用APPLICATION.QUIT方法退出EXCEL进程,还要保证退出时EXCEL不回询问是否要保存文件
    然后再用set nothing就可以了.
      

  9.   

    .Quit
    没用的。
    你要先使用APPLICATION.QUIT方法退出EXCEL进程,还要保证退出时EXCEL不回询问是否要保存文件
    然后再用set nothing就可以了.
    没有打算自动关闭excel,因为是报表,还需要打印后才关闭。
      

  10.   

    只开一次试过了没,关掉了吗?
    你可以试图用一个Excel对象打开多个book,或者sheet,这样可以避免Excel对象没有指针指向的问题
      

  11.   

    两个不同的exe程序,怎么只开一次?
      

  12.   

    应该没有什么大的关系。
    过一段时间以后,这些不用的excel进程应该会自动关闭(由操作系统进行)。
    要么,你就把 Obj_ArgApp 定义为一个公共变量,效果应该会好些。
      

  13.   

    问题是我的Obj_ArgApp 在两个独立的exe程序里的,没有关系的呀
      

  14.   

    如果是两个exe的两个按钮,个进行一次操作应该不会有问题。在你的exe运行结束后Excel.exe.应该会被系统回收(至少我得程序退出有就没有了,你的exe退出后还存在吗?)
      

  15.   

    把你的Excel对象放在函数类定义,不要用全局变量,打开多少个就由你的机器性能决定了。
    下面是例子
    Public Sub GenReport()
        Dim ExecFile As String
        ExecFile="test.xls"
    on error resume next
        Dim ObjExcel As Excel.Application
        Set ObjExcel = New Excel.Application
        If Err.Number <> 0 Then
            MsgBox "无法打开Execl系统,请检查您的机器上是否安装Excel!"
            Exit Sub
        End If
        ObjExcel.Visible = False '''''''''''''''''''''''''''
        Dim ObjBook As Excel.Workbook
        Set ObjBook = ObjExcel.Workbooks.Add
        ObjExcel.Sheets(1).Select
        Dim i As Long
        Dim j As Long
          
            For i = 0 To 100
                For j = 0 To 10
                    ObjExcel.Range(Chr(65 + j) & CStr(i + 1)).Formula = i*j
                Next j
            Next i
        ObjBook.SaveAs ExecFile
        ObjBook.Close False
        Set ObjBook = Nothing
        Set ObjExcel = Nothing
    End Sub
      

  16.   

    那如何判断一个excel的application打开着?
      

  17.   

    我也遇到过,是用api kill进程的
      

  18.   

    waitforsingleobject(创建的对象句柄,INFINITE);