【问题标题】:Pivot Cache in one one workbook, Pivot table in another workbook一个工作簿中的数据透视缓存,另一个工作簿中的数据透视表
【发布时间】:2017-11-22 11:06:58
【问题描述】:

我在工作表“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。该代码适用于同一工作表中的目的地。所以,请让我知道我在哪里犯了错误。

【问题讨论】:

    标签: excel pivot-table vba


    【解决方案1】:

    PivotCachePivotTable 报告的内存缓存。 PivotTable 首先需要此内存缓存才能正常工作。

    您可以从当前工作簿中的数据创建PivotCache,但它必须是新工作簿中数据透视缓存的一部分,才能基于它创建数据透视表。

    由于 PivotCache 在新的 Workbook.PivotCaches 中不可用,因此您无法在该工作簿中创建数据透视表,这就是您的代码无法运行的原因。

    运行良好:

    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
    

    【讨论】:

    • 很好的详细解释:)
    • @ShaiRado 谢谢。
    • 感谢@ShaiRado 的解释,目前,我正在同一个工作簿中创建数据透视表,并使用查找来获取我需要的值。但是我想知道我们是否可以将第一个工作簿的 PivotCache 复制到第二个工作簿,以便在新工作簿中创建一个数据透视表。
    • @Vikash 请参阅编辑 2:将初始 PivotCache 复制到第二个工作簿的最基本方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多