Office中国论坛/Access中国论坛

标题: Access引用Excel创建数据透视表错误 [打印本页]

作者: Henry D. Sy    时间: 2016-9-12 08:41
标题: Access引用Excel创建数据透视表错误
本帖最后由 Henry D. Sy 于 2016-9-12 08:43 编辑

由于新版Access已经不支持数据透视表
所以想在Access中直接操作Excel生成l数据透视表
(不是将表数据导出到Excel,然后在Excel创建)

过程运行到注释处错误,请大家帮忙指点一下.

  1. Private Sub CreatePivotTable_Click()

  2.     Dim XLApp As Excel.Application
  3.     Dim XLB As Workbook
  4.     Dim XLS As Worksheet
  5.     Dim PC As PivotCache
  6.     Dim PT As PivotTable
  7.     Dim sSQL As String

  8.     sSQL = "SELECT STYLE,PO,SIZE,COLOR,QUANTITY FROM ORD"

  9.     Set XLApp = CreateObject("Excel.Application")

  10.     Set XLB = XLApp.Workbooks().Add
  11.     XLB.SaveAs CurrentProject.Path & "\A.xlsx"

  12. Set PC = ActiveWorkbook.PivotCaches.Add(xlExternal)
  13.     Set PC.Recordset = CurrentDb.OpenRecordset(sSQL)            '到此处出现错误1004
  14.     Worksheets.Add
  15.     ActiveSheet.Name = "PivotSheet"
  16.     ActiveWindow.DisplayGridlines = False

  17.     Set PT = ActiveSheet.PivotTables.Add(PC, Range("A1"), "MyPivot")

  18.     With PT
  19.         .PivotFields("STYLE").Orientation = xlPageField
  20.         .PivotFields("PO").Orientation = xlRowField
  21.         .PivotFields("COLOR").Orientation = xlRowField
  22.         .PivotFields("SIZE").Orientation = xlColumnField
  23.         .PivotFields("QUANTITY").Orientation = xlDataField
  24.         .DataPivotField.Orientation = xlRowField
  25.     End With

  26. XLB.Save
  27.     XLApp.Visible = True

  28.     Set XLApp = Nothing
  29.     Set XLB = Nothing
  30.     Set XLS = Nothing
  31. End Sub
复制代码

[attach]59906[/attach]


作者: roych    时间: 2016-9-12 17:23
回头再看看,数据透视表不太熟。
作者: Henry D. Sy    时间: 2016-9-12 19:18
roych 发表于 2016-9-12 17:23
回头再看看,数据透视表不太熟。

谢谢你,
问题自己解决了,忘了设定游标为客户端.
作者: roych    时间: 2016-9-13 11:19
Henry D. Sy 发表于 2016-9-12 19:18
谢谢你,
问题自己解决了,忘了设定游标为客户端.

PC.Recordset.CursorLocation =adUseClient?
大概是这个了。一般可以先判断能不能读取recordcount,如果读取为-1,往往是这个问题。前面讲recordset时,跟阿航讨论过这个问题。
作者: Henry D. Sy    时间: 2016-9-13 12:12
roych 发表于 2016-9-13 11:19
PC.Recordset.CursorLocation =adUseClient?
大概是这个了。一般可以先判断能不能读取recordcount,如 ...

在打开记录集之前,设定游标,因为此时游标属性为读写,
而记录集打开之后,该属性为只读
-----------------------
rs.CursorLocation =adUseClient
rs.Open sSQL..................
-----------------------------



作者: yanwei82123300    时间: 2023-2-27 08:56
Henry D. Sy 发表于 2016-9-13 12:12
在打开记录集之前,设定游标,因为此时游标属性为读写,
而记录集打开之后,该属性为只读
---------------- ...

Henry D. Sy老师您好!您这个例子能否分享一下正确的,我目前也为access透视表问题发愁呢?谢谢




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