设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 5036|回复: 13
打印 上一主题 下一主题

[ADO/DAO] access程序执行完毕仍有excel驻留在内存

[复制链接]
跳转到指定楼层
1#
发表于 2013-4-17 12:24:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
执行导出到EXCEL后,在任务管理器发现还有一个EXCEL的进程驻留,要退出ACCESS后该进程才消失,不知道为什么?如何在只是关闭窗体后就清理EXCEL进程?如下为该过程代码,请高手赐教:
Private Sub OutputExcel_Click()
On Error GoTo Err_OutputExcel_Click
DoCmd.SetWarnings False
Dim xlApp As excel.Application
Dim xlBook As Workbook
Dim xlSheet As Worksheet
Set xlApp = CreateObject("Excel.Application")
Set xlApp = New excel.Application
Dim Myrecordset As ADODB.Recordset
Dim strSQL As String
Dim recordamt As Integer
Dim c As Integer
Dim i As Integer
xlApp.DisplayAlerts = False
'导出
    Set xlBook = Workbooks.Add
    Set xlSheet = ActiveWorkbook.Sheets(1)
    Set Myrecordset = New ADODB.Recordset
    strSQL = "SELECT * from 表1"
    Myrecordset.Open strSQL, CurrentProject.Connection, adOpenStatic
    recordamt = Myrecordset.RecordCount
    Myrecordset.MoveFirst
    With xlSheet
        .Range("B7").CopyFromRecordset Myrecordset
        c = 2
        For i = 0 To Myrecordset.Fields.Count - 1
        xlApp.ActiveSheet.Cells(6, c).Value = Myrecordset.Fields(i).Name
        c = c + 1
       Next i
    End With
    Set Myrecordset = Nothing
    Set Conn = Nothing
    xlApp.ActiveWorkbook.SaveAs "D:\TEMP\TEST1.xlsx"
    xlApp.Quit
    Set xlApp = Nothing
    Set xlBook = Nothing
    Set xlSheet = Nothing
    MsgBox "完成导出"
Exit_OutputExcel_Click:
    Exit Sub
Err_OutputExcel_Click:
    MsgBox Err.Description
    Resume Exit_OutputExcel_Click
End Sub
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2013-4-17 12:51:36 | 只看该作者
对美女的问题表示关注

点击这里给我发消息

3#
发表于 2013-4-17 13:10:38 | 只看该作者
1.里面代码看看中间执行有否出错.
2.另把 xlApp.visible=true 看看是否真正退出了
4#
 楼主| 发表于 2013-4-17 17:27:21 | 只看该作者
tmtony 发表于 2013-4-17 13:10
1.里面代码看看中间执行有否出错.
2.另把 xlApp.visible=true 看看是否真正退出了

用这种方法,EXCEL在执行过程中打开,执行完毕关闭了。但任务管理器还看见EXCEL的进程,这是什么回事?

点击这里给我发消息

5#
发表于 2013-4-17 21:37:18 | 只看该作者
你可这样试试
1.不做任何操作,打开后马上关闭,看看是否正常
2.然后逐条加上一些操作,逐条加,看看问题出在哪句
6#
发表于 2013-4-17 22:24:51 | 只看该作者
美女的问题一定要帮({:soso_e113:}太麻烦的除外)

Private Sub OutputExcel_Click()
    On Error GoTo Err_OutputExcel_Click
    Dim xlApp As Excel.Application
    Dim xlBook As Workbook
    Dim xlSheet As Worksheet
    Dim Myrecordset As ADODB.Recordset
    Dim strSQL As String
    Dim c As Integer
    Dim i As Integer
   
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Sheets(1)
    xlApp.DisplayAlerts = False
   
    Set Myrecordset = New ADODB.Recordset
    strSQL = "SELECT * from 表1"
    Myrecordset.Open strSQL, CurrentProject.Connection, adOpenStatic
   
    xlSheet.Range("B7").CopyFromRecordset Myrecordset
    c = 2
    For i = 0 To Myrecordset.Fields.Count - 1
        xlApp.ActiveSheet.Cells(6, c).Value = Myrecordset.Fields(i).Name
        c = c + 1
    Next i
           
    Myrecordset.Close
    Set Myrecordset = Nothing
    Set xlSheet = Nothing
    xlBook.SaveAs "c:\TEST1.xlsx"
    xlBook.Close
    Set xlBook = Nothing
    xlApp.Quit
    Set xlApp = Nothing
    MsgBox "完成导出"
Exit_OutputExcel_Click:
    Exit Sub
Err_OutputExcel_Click:
    MsgBox Err.Description
    Resume Exit_OutputExcel_Click
End Sub
7#
发表于 2013-4-17 22:31:46 | 只看该作者
哦对,这样比较好:

Private Sub OutputExcel_Click()
    On Error GoTo Err_OutputExcel_Click
    Dim xlApp As Excel.Application
    Dim xlBook As Workbook
    Dim xlSheet As Worksheet
    Dim Myrecordset As ADODB.Recordset
    Dim strSQL As String
    Dim c As Integer
    Dim i As Integer
   
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Sheets(1)
    xlApp.DisplayAlerts = False
   
    Set Myrecordset = New ADODB.Recordset
    strSQL = "SELECT * from 表1"
    Myrecordset.Open strSQL, CurrentProject.Connection, adOpenStatic
   
    xlSheet.Range("B7").CopyFromRecordset Myrecordset
    c = 2
    For i = 0 To Myrecordset.Fields.Count - 1
        xlApp.ActiveSheet.Cells(6, c).Value = Myrecordset.Fields(i).Name
        c = c + 1
    Next i
   
    xlBook.SaveAs "c:\TEST1.xlsx"
   
    MsgBox "完成导出"
Exit_OutputExcel_Click:
    On Error Resume Next
    Set xlSheet = Nothing
    xlBook.Close
    Set xlBook = Nothing
    xlApp.Quit
    Set xlApp = Nothing
    Myrecordset.Close
    Set Myrecordset = Nothing
    Exit Sub
Err_OutputExcel_Click:
    MsgBox Err.Description
    Resume Exit_OutputExcel_Click
End Sub
8#
 楼主| 发表于 2013-4-18 12:20:36 | 只看该作者
chaosheng 发表于 2013-4-17 22:31
哦对,这样比较好:

Private Sub OutputExcel_Click()

谢谢你的指导,方法可行。不知道区别是不是加了“xlBook.Close”,还是把清理内存的事件放在“Exit_OutputExcel_Click”?

点击这里给我发消息

9#
发表于 2013-4-18 13:10:20 | 只看该作者
aleeado 发表于 2013-4-18 12:20
谢谢你的指导,方法可行。不知道区别是不是加了“xlBook.Close”,还是把清理内存的事件放在“Exit_Outpu ...

加“xlBook.Close”之前我也试过,没用。
10#
发表于 2013-4-18 13:50:35 | 只看该作者
aleeado 发表于 2013-4-18 12:20
谢谢你的指导,方法可行。不知道区别是不是加了“xlBook.Close”,还是把清理内存的事件放在“Exit_Outpu ...

1、您这2行产生了2个excel.Application
Set xlApp = CreateObject("Excel.Application")
Set xlApp = New excel.Application

2、释放要有顺序,xlSheet之后xlBook最后xlApp
可能是xlSheet和xlBook的引用还在造成xlApp无法释放
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-11 17:58 , Processed in 0.092510 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表