繁体   English   中英

一个工作簿中的数据透视表缓存,另一工作簿中的数据透视表

[英]Pivot Cache in one one workbook, Pivot table in another workbook

我在工作表“ sourceSheet”中的(例如)工作簿“ sourceBook.xlsx”中创建了数据透视缓存。 我试图在工作表“ destinSheet”中的另一个工作簿“ destinBook.xlsx”中创建数据透视表。

Dim pCache As PivotCache
Dim pTable As PivotTable
Dim pRange As Range

Module2.hc_book.Activate
Set pRange = ActiveSheet.Range(hc_pidCol & "1:" & hc_pidCol & hc_lastRow)

Set pCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, pRange)
Module2.mt_book.Activate
Set tempSheet = Worksheets.Add
tempSheet.Select
Set pTable = ActiveSheet.PivotTables.Add(pCache, Range("A1"), "MyPivotTable")

代码在最后一行-我设置pTable的“无效过程调用或参数”中给了我错误。 该代码在同一工作表中可以很好地用于目的地。 所以,请让我知道我在哪里犯错。

PivotCachePivotTable报表的内存缓存。 首先需要此内存缓存才能使PivotTable起作用。

您可以从当前工作簿中的数据创建PivotCache ,但是它必须是新工作簿中PivotCaches的一部分,以便基于该数据表创建PivotTable。

由于PivotCache在新的Workbook.PivotCaches不可用,因此无法在该工作簿中创建PivotTable,这就是为什么它无法运行的原因。

运行良好:

Sub test()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim pRange As Range
    Dim pc As PivotCache
    Dim pt As PivotTable

    Set wb = Workbooks.Add
    Set ws = wb.Worksheets(1)

    Set pRange = ThisWorkbook.Sheets("Sheet1").Range("A1:C3")

    Set pc = wb.PivotCaches.Create(xlDatabase, pRange)
    Set pt = ws.PivotTables.Add(pc, Range("F2"), "MyPivotTable")

End Sub

这不起作用:

Sub test()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim pRange as Range
    Dim pc As PivotCache
    Dim pt As PivotTable

    Set wb = Workbooks.Add
    Set ws = wb.Worksheets(1)

    Set pRange = ThisWorkbook.Sheets("Sheet1").Range("A1:C3")

    Set pc = ThisWorkbook.PivotCaches.Create(xlDatabase, pRange) 'Cache in ThisWorkbook
    Set pt = ws.PivotTables.Add(pc, Range("F2"), "MyPivotTable") 'Cache unavailable, error 5 - Invalid Procedure Call or Argument. 

End Sub

此错误的无效参数是pc对象。

简而言之: PivotCache对象需要成为您希望在其中创建PivotTableWorkbookPivotCaches集合的一部分

编辑:只是为了澄清: PivotCache是内存中的对象。 它与您从中获取数据的源无关。 不管您选择什么,此来源的确可以是第一个工作簿中的范围,SQL查询的结果或CSV文件。

编辑2: “复制” pivotCache到新工作簿的一个非常基本的实现是:

Sub CopyPivotCache()
    Dim wb As Workbook
    Dim InitialPivotCache As PivotCache
    Dim CopyPivotCache As PivotCache

    Set wb = Workbooks.Add
    Set InitialPivotCache = ThisWorkbook.PivotCaches(1)
    Set CopyPivotCache = wb.PivotCaches.Create(InitialPivotCache.SourceType, InitialPivotCache.SourceData)
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM