为什么这个函数不能多次调用呢?第二次调用就会出现“对象变量或with块变量未设置”?怎么解决啊??
Public Function SaveAsExcel1(myrs2 As ADODB.Recordset, DirFile As String)   'DirFile是文件保存的完整路径及文件名
Dim rs As New ADODB.Recordset
Dim objExcel As New Excel.Application
Dim objBook As New Excel.Workbook
Dim objSheet As New Excel.Worksheet
Dim rowCount As Long
Dim colCount As Integer
Dim j As Integer
Dim i As Integer
Set objExcel = CreateObject("Excel.Application")
Set objBook = objExcel.Workbooks.Add
On Error GoTo Error1:
Set objSheet = objBook.Worksheets(1)
Set rs = myrs2
colCount = rs.Fields.Count
rowCount = rs.RecordCount
For i = 0 To colCount - 1
objSheet.Cells(1, i + 1) = rs.Fields(i).Name + Chr(13)
objSheet.Columns(i + 1).Select
Selection.NumberFormatLocal = "@"
Next
For j = 2 To rowCount + 1
For i = 0 To colCount - 1
objSheet.Cells(j, i + 1) = CStr(rs.Fields(i))
Next
rs.MoveNext
Next
rs.MoveFirst
objBook.SaveAs (DirFile)
Set rs = Nothing
objBook.Close
objExcel.Quit
Set objExcel = Nothing
MsgBox "数据已经全部导出"
Exit Function
Error1:
MsgBox error
objBook.Close
objExcel.Quit
Set objExcel = Nothing
End Function

解决方案 »

  1.   


    objBook.Close 
    objExcel.Quit 
    Set objExcel = Nothing 
    这样释放有问题吗?我看网上的都这样释放的啊。我还试过这样释放
    objBook.Close
    objExcel.Quit
    Set objSheet = Nothing
    Set objBook = Nothing
    Set objExcel = Nothing
    可还是有问题啊,怎么解决啊?
      

  2.   

    Set rs = myrs2 Set rs = Nothing 这个时候你的myrs2应该被关闭了,所以第二次就出现问题了。你试试看去掉set rs=nothing这个看看在这个函数中完全没有必要用rs来代替myrs2,因为你的操作并没有改变里面的内容
      

  3.   

    我发现问题了。
    For i = 0 To colCount - 1 
    objSheet.Cells(1, i + 1) = rs.Fields(i).Name + Chr(13) 
    objSheet.Columns(i + 1).Select 
    Selection.NumberFormatLocal = "@" 
    Next i
    这是第一个for循环,用来保存字段名,并且将每一列的单元格属性设置为文本型,问题就出在这里
    objSheet.Columns(i + 1).Select '设置单元格属性为文本
    Selection.NumberFormatLocal = "@" 
    第一次调用函数,循环设置单元格属性没出问题;第二次调用函数,在此处循环时就出现问题了,去掉这两句设置属性的语句就没问题了。
    但我想把excel的单元格设置为文本属性该怎么做呢???
      

  4.   


    skyboy,我看不是你说的设置文本格式的问题,我很怀疑是4楼clear_zero所说的问题。你试试在SaveAsExcel1过程中将Set rs = Nothing 注释掉,改为在调用程序中程序结束时再释放用到的ADODB.Recordset型指针。我先去吃饭,待会儿再来看有没有什么结果。