Office中国论坛/Access中国论坛

标题: Access引用Excel为何excel进程关不掉 [打印本页]

作者: Henry D. Sy    时间: 2016-9-13 21:11
标题: Access引用Excel为何excel进程关不掉
Access引用Excel为何excel进程关不掉
下面的附件是
在Access中引用Excel,生成excel数据透视表到工作表.
第一次运行一切正常,再次运行即出现错误.
查出出错原因是进程里还有excel程序
请大家帮忙看看.

  1. Private Sub CreatePivotTable_Click()

  2.     Dim XLA As New Excel.Application
  3.     Dim XLB As Workbook
  4.     Dim XLS As Worksheet
  5.     Dim PC As PivotCache
  6.     Dim PT As PivotTable
  7.     Dim rs As New ADODB.Recordset
  8.     Dim sSQL As String


  9.     Set XLA = CreateObject("Excel.Application")
  10.     Set XLB = Nothing
  11.     Set XLS = Nothing
  12.     Set XLB = XLA.Workbooks().Add

  13.     XLB.SaveAs CurrentProject.Path & "\PivotTable.xlsx"

  14.     Set XLS = XLB.Worksheets.Add
  15.     XLS.Name = "PivotSheet"
  16.     XLS.Activate

  17.     rs.CursorLocation = adUseClient

  18.     sSQL = "SELECT * FROM ORD"
  19.     rs.Open sSQL, CurrentProject.Connection, adOpenKeyset, adLockReadOnly

  20.     Set PC = ActiveWorkbook.PivotCaches.Create(xlExternal)
  21.     Set PC.Recordset = rs

  22.     Set PT = ActiveSheet.PivotTables.Add(PC, Range("A1"), "A")

  23.     With ActiveSheet.PivotTables("A")
  24.         .PivotFields("STYLE").Orientation = xlPageField
  25.         .PivotFields("PO").Orientation = xlRowField
  26.         .PivotFields("COLOR").Orientation = xlRowField
  27.         .PivotFields("pack").Orientation = xlRowField
  28.         .PivotFields("SIZE").Orientation = xlColumnField
  29.         .PivotFields("QUANTITY").Orientation = xlDataField
  30.     End With

  31.     rs.Close

  32.     XLB.Save

  33.     MsgBox "PivotTable Saved On " & CurrentProject.Path

  34.     Set PC = Nothing
  35.     Set PT = Nothing


  36.     Set rs = Nothing
  37.     Set XLB = Nothing
  38.     Set XLS = Nothing
  39.     Set XLA = Nothing
  40.     XLA.Quit '特意加上这句还是留住在进程里

  41. End Sub

复制代码
[attach]59940[/attach]


作者: tmtony    时间: 2016-9-13 21:15
Excel 也要调用自己的先关闭一下
然后先关闭 小的对象
再关闭大的对象
最后再设置 为nothing
作者: Henry D. Sy    时间: 2016-9-13 21:18
tmtony 发表于 2016-9-13 21:15
Excel 也要调用自己的先关闭一下
然后先关闭 小的对象
再关闭大的对象

谢谢站长,我试试.
Excel 也要调用自己的先关闭一下
这句话的意思,是指?
作者: Henry D. Sy    时间: 2016-9-13 21:27
我原来是生成好透视表,excel是可见的
然后,手工关闭excel
XLA.Visible = True
XLA.WindowState = xlMaximized
作者: liwen    时间: 2016-9-13 22:16
Private Sub CreatePivotTable_Click()

    Dim XLA As New Excel.Application
    Dim XLB As Workbook
    Dim XLS As Worksheet
    Dim PC As PivotCache
    Dim PT As PivotTable
    Dim rs As New ADODB.Recordset
    Dim sSQL As String


    Set XLA = CreateObject("Excel.Application")
    Set XLB = Nothing
    Set XLS = Nothing
    Set XLB = XLA.Workbooks().Add

    XLB.SaveAs CurrentProject.Path & "\PivotTable.xlsx"

    Set XLS = XLB.Worksheets.Add
    XLS.Name = "PivotSheet"
    XLS.Activate

    rs.CursorLocation = adUseClient
    sSQL = "SELECT style,po,color,pack,quantity FROM ORD"
    rs.Open sSQL, CurrentProject.Connection, adOpenKeyset, adLockReadOnly

    Set PC = XLA.ActiveWorkbook.PivotCaches.Create(xlExternal)
    Set PC.Recordset = rs

    Set PT = XLA.ActiveSheet.PivotTables.Add(PC, XLA.ActiveSheet.Range("A1"), "A")

    With XLA.ActiveSheet.PivotTables("A")
        .PivotFields("STYLE").Orientation = xlPageField
        .PivotFields("PO").Orientation = xlRowField
        .PivotFields("COLOR").Orientation = xlRowField
        .PivotFields("pack").Orientation = xlRowField
'      .PivotFields("SIZE").Orientation = xlColumnField
        .PivotFields("QUANTITY").Orientation = xlDataField
    End With

    rs.Close

    XLB.Save

    MsgBox "PivotTable Saved On " & CurrentProject.Path
    Set PC = Nothing
    Set PT = Nothing
    Set rs = Nothing
    Set XLS = Nothing

XLB.Close

    Set XLB = Nothing
    XLA.Quit
    Set XLA = Nothing

End Sub

作者: Henry D. Sy    时间: 2016-9-14 01:00
liwen 发表于 2016-9-13 22:16
Private Sub CreatePivotTable_Click()

    Dim XLA As New Excel.Application

谢谢liwen版,可以了.
对excel这是一点不懂,没有方向.
作者: roych    时间: 2016-9-14 12:24
Henry D. Sy 发表于 2016-9-14 01:00
谢谢liwen版,可以了.
对excel这是一点不懂,没有方向.


顺序上,应该是先关闭工作簿,再退出excel组件。最后再设置nothing,例如:
wkbkObj.close
exlObj.Quit
作者: Henry D. Sy    时间: 2016-9-14 12:45
roych 发表于 2016-9-14 12:24
顺序上,应该是先关闭工作簿,再退出excel组件。最后再设置nothing,例如:
wkbkObj.close
exlObj.Qu ...

谢谢你
透视表生成完毕,excel是可见的,
然后在手工关闭的.
程序出现错误,除了顺序有点问题,
主要原因还是关键字"SIZE"引起的




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3