我现在做这样的导出,我的过程有三种处理方式,直接打印,导出,以Excell方式打开。
已经实现了,但调用。BOOK.close.EXcel.QUIT SHEET。CLose 已经全部关闭。然后将三个对象全部置成NOTHING 。但EXcell进程依然存在(Ctrl+ALT+DEl能够发现)。导致再调用这个过程时,无法往EXCELL对象的表格中写入数据了。必须退出我的程序(即使Ctrl+ALT+DEl还能够发现EXCELL存在)再启动才能再使用该过程一次。再想用,还得退出。是不是我的程序中什么对象没退干净呢????

解决方案 »

  1.   

    我用Excel2000测试了一下,没有什么问题,程序运行后任务管理器内没有发现Excel的进程。Private Sub Command1_Click()
        Dim xApp As Excel.Application
        Dim xBook As Excel.Workbook
        Dim xSheet As New Excel.Worksheet
        Dim strFileName As String
        
        Set xApp = New Excel.Application
        Set xBook = xApp.Workbooks.Add
        Set xSheet = xBook.Worksheets("Sheet1")
        
        strFileName = "c:\test.xls"
        If Dir(strFileName) <> "" Then Kill strFileName
        
        xSheet.Cells(1, 1) = "Test"
        xSheet.SaveAs "c:\test.xls"
        
        Set xSheet = Nothing
        
        xBook.Close
        Set xBook = Nothing
        
        xApp.Quit
        Set xApp = Nothing
        
        MsgBox "OK"
    End Sub
      

  2.   

    我遇到了这样的问题,导出EXCEL之后,再导出就在写入数据那行出错了不知为什么如下:
    range(...,...).value=二维数据。
    本来这样可以把二维数据写进表格中。第一次可以,再次使用的时候,就出错了,应用对象,工作薄表格都关闭并且已经置成NOTHING了。可是还出错而且用CTrl+alt+del三个键,能发现有一个EXCEL进程在系统中。我退出我的应用程序此进程不消失。再启动程序并且再导出一次表格。又出现一个。依次类推,每次启动程序并且导出表格就出现一个进程。就这两个问题请高手帮忙啊。。
      

  3.   

    这位仁兄,咱俩的写法大部分一样我那些代码也没什么问题(在我看来),只是下面这几句和你的思路不同。
        strFileName = "c:\test.xls"
        If Dir(strFileName) <> "" Then Kill strFileName    '我没有这两句。因为如果磁盘中有,导出时EXCEL会问是否覆盖。没有什么危害所以没做这样的处理。
        
        xSheet.Cells(1, 1) = "Test"       这里我只不过赋一个二维数组。
        xSheet.SaveAs "c:\test.xls"
        
    只是为什么,我的程序,第一次导出时好使,再导的时候就不行了呢????而必须重新启动程序才能继续再导一次而且只能导一次。而任务管理器中每导一次就出现一个未关闭的进程。而这个进程似乎不影响我的导表(至少启动程序第一次导表不影响,而二次以后又不知是不是此原因。)我就这两个疑问。大家看看啊。
      

  4.   

    Dim i As Integer
        Dim j As Integer
        Dim ex As Object
        Dim exwbook As Object
        Dim exsheet As Object
        
        Set ex = CreateObject("Excel.Application")
        Set exwbook = Nothing
        Set exsheet = Nothing
        Set exwbook = ex.Workbooks().Add
        Set exsheet = exwbook.Worksheets("sheet1")
        
        
        '写数据
        Dim MyArray() As String
        ReDim MyArray(WgMc.Rows, WgMc.Cols)
        For i = 0 To WgMc.Rows - 1    '行
            For j = 0 To WgMc.Cols - 1    '列
    '            exsheet.Cells(i + 3, j + 1).Value = wgmc.TextMatrix(i, j)
                 MyArray(i, j) = WgMc.TextMatrix(i, j)
            Next j
        Next 
        Range(Cells(3, 1), Cells(WgMc.Rows + 2, WgMc.Cols)).Value = MyArray
        
        '设置首行字体
        For j = 1 To WgMc.Cols
            exsheet.Columns(j).HorizontalAlignment = WgMc.CellAlignment
        Next
        exsheet.Rows("3:1").EntireColumn.AutoFit     '首行自动宽度
        exsheet.Rows("3:1").Font.Bold = True         '粗体
        exsheet.Rows("3:1").HorizontalAlignment = 3  '1右,2左3中
        
        Range(Cells(1, 1), Cells(2, WgMc.Cols)).MergeCells = True '先合并单元格
        With exsheet.Cells(1, 1)
            .Value = BiaoTop    '传过来的报表标题
            .Font.Bold = True        '粗体
            .Font.Underline = xlUnderlineStyleDoubleAccounting  '下划线
            .HorizontalAlignment = 3 '1右,2左3中
            .VerticalAlignment = 2
            .Font.Size = 18
        End With
                exwbook.SaveAs sFile            exwbook.Close
                 ex.Quit
                Set ex = Nothing
                Set exwbook = Nothing
                Set exsheet = Nothing
      

  5.   

    你的程序我测试时不能运行,我删除了设置格式的那一部分:Private Sub Command1_Click()
        Dim I As Integer
        Dim J As Integer
        Dim ex As Object
        Dim exwbook As Object
        Dim exsheet As Object
        
        Set ex = CreateObject("Excel.Application")
        Set exwbook = Nothing
        Set exsheet = Nothing
        Set exwbook = ex.Workbooks().Add
        Set exsheet = exwbook.Worksheets("sheet1")
        
        '写数据
        Dim MyArray() As String
        ReDim MyArray(WgMc.Rows, WgMc.Cols)
        For I = 0 To WgMc.Rows - 1    '行
            For J = 0 To WgMc.Cols - 1    '列
                 MyArray(I, J) = WgMc.TextMatrix(I, J)
            Next J
        Next
        exsheet.Range(exsheet.Cells(3, 1), exsheet.Cells(WgMc.Rows + 2, WgMc.Cols)).Value = MyArray
        
        sfile = "c:\test.xls"
        exwbook.SaveAs sfile    exwbook.Close
        ex.Quit
        Set ex = Nothing
        Set exwbook = Nothing
        Set exsheet = Nothing
        
        MsgBox "OK"
    End SubPrivate Sub Form_Load()
        Dim I As Long, J As Long
        
        With WgMc
            .Rows = 20
            .Cols = 6
            For I = 1 To 19
                For J = 1 To 5
                    .TextMatrix(I, J) = CLng(Rnd() * 1000)
                Next J
            Next I
        End With
    End Sub
      

  6.   

    你原来程序中的下列程序是不能运行通过的,可能也正是因为这个原因才导致程序出错,而且出错后你没有做任何的清理工作,所以Excel的进程仍未结束:Range(Cells(3, 1), Cells(WgMc.Rows + 2, WgMc.Cols)).Value = MyArray改成:exsheet.Range(exsheet.Cells(3, 1), exsheet.Cells(WgMc.Rows + 2, WgMc.Cols)).Value = MyArray
      

  7.   

    确实是这样,但我象你这样写第一次就出错了。所以把exsheet去掉了,第一次通过,但后果是出现我所说的情况。我的机器连VB也卸掉了。所以不能试。但下面这句为什么会出错呢???难道要用一下Activet???我记得我曾用过也不好使。
      

  8.   

    我用VB6 + Excel2000,上面那段程序测试时没有问题。