With myexcel 
  ActiveWorkbook.SaveAs FileName:=App.Path & ".\导出维修单列表_" & Format(DLDT1, "YYYYMMDD") & "_" & Hour(Time) & Minute(Time) & Second(Time) & ".xls"   这里提示“”实时错误 91 对象变量或 With 块变量未设置
  End With另外:Public myexcel As New Excel.Application
Public mybook As New Excel.Workbook
Public mysheet As New Excel.WorksheetPublic Sub OpenExcel()
  Set myexcel = CreateObject("Excel.Application")
  Set mybook = myexcel.Workbooks.Add
  Set mysheet = mybook.Worksheets(1)
End SubPublic Sub CloseExcel()
Set mysheet = Nothing
mybook.Close
Set mybook = Nothing
Set myexcel = Nothing
myexcel.Quit
End Sub

解决方案 »

  1.   

      ActiveWorkbook很有可能变成了Nothing
      

  2.   

    那我怎么改呢?我都弄了好久了。实在没办法!vb excel的东西不熟!
      

  3.   

    还有我EXCEL进程导出后第一个文件关闭了。但进程还在!为什么?能帮我看看代码吗?帮我指出那错误。我改下。谢了。
      

  4.   

    大概看了一下你的程序,没细看:
    关闭EXCEL应该类似以下这样:
    excel_app.Quit
    Set excel_app = Nothing给你段我以前写的程序,你对照看看吧:
    VB导出EXCEL
    Private Sub Command1_Click()
        'On Error GoTo myErr
        Dim excel_app As Object
        Dim Filename1 As String, FilePath As String
        
        '设置EXCEL文件名
         Filename1 = "temp"
        '建立 Excel 应用程序
         Set excel_app = CreateObject("Excel.Application")
        '显示Excel应用程序
         excel_app.Visible = False
        '添加新工作簿:
        excel_app.WorkBooks.Add
        '检测Excel版本
        If Val(excel_app.Application.Version) >= 12 Then
            FilePath = Filename1 & ".xlsx"
        Else
            FilePath = Filename1 & ".xls"
        End If
        '设置一个鼠标形状
        Screen.MousePointer = vbHourglass
        '设置第1个工作表为活动工作表:
        excel_app.Sheets("sheet1").Select
        '设置指定列的宽度(单位:字符个数)
        excel_app.ActiveSheet.Columns(1).ColumnWidth = 4
        excel_app.ActiveSheet.Columns(2).ColumnWidth = 6
        '初始化列对齐方式
        Dim iiCol As Integer
        For iiCol = 1 To 2
            With excel_app.ActiveSheet
                '4右对齐,3居中
                .Columns(iiCol).HorizontalAlignment = 4
            End With
        Next iiCol    Dim a(29, 1) As Integer  '你的数组
        Dim i As Integer, j As Integer
        For i = 0 To 29 '初始化你的数据
            For j = 0 To 1
                a(i, j) = i + 1
            Next j
        Next i    '写入EXCEL
        For i = 1 To 30
            For j = 1 To 2
                excel_app.cells(i, j) = a(i - 1, j - 1)
            Next j
            DoEvents
        Next i
        
        '工作表另存为:
        If Not excel_app.ActiveWorkBook.Saved Then
            excel_app.ActiveWorkBook.SaveAs FileName:=FilePath
        End If
        '关闭Excel:
        excel_app.Quit
        Set excel_app = Nothing
        '还原鼠标形状:
        Screen.MousePointer = vbDefault
        MsgBox "导出了" & UBound(a) + 1 & "条记录", , "导出成功"
        
    Exit Sub
    myErr:
        Screen.MousePointer = vbDefault
        If Err.Number = 429 Then
            Screen.MousePointer = vbDefault
            MsgBox "请先安装EXCEL!", , "导出错误"
            Exit Sub
        End If
        excel_app.DisplayAlerts = False '关闭时不提示保存
        excel_app.Quit '关闭EXCEL
        excel_app.DisplayAlerts = True  '关闭时提示保存
        Set excel_app = Nothing
        MsgBox " 导出数据到 Excel 时出错! ", , "导出错误"
    End Sub
      

  5.   

    ActiveWorkbook.SaveAs FileName:=App.Path & ".\导出维修单列表_" & Format(DLDT1, "YYYYMMDD") & "_" & Hour(Time) & Minute(Time) & Second(Time) & ".xls"".\这个是什么意思,建议你看看你这个 路径 是否有问题
       MsgBox App.Path & ".\导出维修单列表_" & Format(DLDT1, "YYYYMMDD") & "_" & Hour(Time) & Minute(Time) & Second(Time) & ".xls"""
      

  6.   

    路径不是问题,我改成c:\1.xls也一样报错。
      

  7.   

       MsgBox App.Path & "\导出维修单列表_" & Format(DLDT1, "YYYYMMDD") & "_" & Hour(Time) & Minute(Time) & Second(Time) & ".xls"
       With myexcel.Selection
            ActiveWorkbook.SaveAs FileName:=App.Path & "\导出维修单列表_" & Format(DLDT1, "YYYYMMDD") & "_" & Hour(Time) & Minute(Time) & Second(Time) & ".xls"
       End WithD:\Downloads\backup\车辆维修项目\友诚日丰维修管理软件\导出维修单列表_20090822_17522.xls
      

  8.   

    我发现在第一次导出后,有两个EXCEL进程未关闭。所以第二次报错了。我觉得问题出在这里。
      

  9.   

    Try:Public Sub CloseExcel() 
        mybook.Close 
        Set mysheet = Nothing 
        Set mybook = Nothing 
        myexcel.Quit 
        Set myexcel = Nothing 
    End Sub
      

  10.   

    有好转,但过去是有两个EXCEL进程没关闭,现在就剩EXCEL一个进程了。
    再帮我看看还有那不对。
      

  11.   

    应该是你把相应的对象设置为Nothing了,你可以单步调试看一看
      

  12.   

    多谢  goosen 老师。现在成功了。但我发现总是有一个EXCEL进程还未关闭。除非我整体退出程序才能关闭进程。我的模块是这么定义的。Public myexcel As New Excel.Application
    Public mybook As New Excel.Workbook
    Public mysheet As New Excel.WorksheetPublic Sub OpenExcel()
      Set myexcel = CreateObject("Excel.Application")
      Set mybook = myexcel.Workbooks.Add
      Set mysheet = mybook.Worksheets(1)
    End Sub'Public Sub CloseExcel()
    'Set mysheet = Nothing
    'mybook.Close
    'Set mybook = Nothing
    'Set myexcel = Nothing
    'myexcel.Quit
    'End SubPublic Sub CloseExcel()
        mybook.Close
        Set mysheet = Nothing
        Set mybook = Nothing
        myexcel.Quit
        Set myexcel = Nothing
    End Sub
    请问能不能导出后把最后一个excel进程也关闭呢?
      

  13.   

    用我给你改的代码应该是可以完全关闭的如果不能  只好强行杀进程了
    在你的程序最后加上这句   Shell "taskkill /im EXCEL.exe /f", vbHide
      

  14.   

    多谢。已结贴给分!经测试发现可能就是要留一个进程吧。我用你的代码终止了,再次导入时提示“远程服务器错误”等。新的错误出来了。晕!不过现在已经达到我的要求了。谢谢!goosen老师!