在单个工作表上更新2个透视表

时间:2018-01-09 16:57:47

标签: vba pivot-table

我遇到了一个问题,我遇到了问题。我在一个工作表上有两个数据透视表,它们都使用相同的数据源,但提供了不同的数据“视图”。但是,一个表链接到数据透视图,并且两个表都连接到几个切片器。当我删除其中一个表(和相关的编码)时,宏工作正常,但如果我重新添加另一个数据透视表,我收到“运行时错误'5'”。我无法弄清楚如何解决这个问题:(

当前的宏:

Sub UpdatePivs()

    Dim SrcData As String
    Dim SourceRows As Long

    SourceRows = Worksheets("Source Data").Range("I" & Rows.Count).End(xlUp).Row

    SrcData = "'Source Data'"!A2:AZ" & SourceRows

    Worksheets("Assigned").PivotTables("AssignedTable").ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData)
    Worksheets("Assigned").PivotTables("AssignedTable").RefreshTable

    Worksheets("Assigned").PivotTables("TBDTable").ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData)
    Worksheets("Assigned").PivotTables("TBDTable").RefreshTable

我看过一些建议将源转换为表的帖子,但是,我希望找到一个不需要的解决方案。

任何帮助将不胜感激:)我也为任何格式怪异道歉。目前在手机上

编辑:我正在使用Excel 2010

1 个答案:

答案 0 :(得分:0)

在使用上面的宏测试了一些内容之后,当切片器没有连接到其中一个数据透视表时,它工作得很好。因此,我尝试测试了一些可以实现以下目标的事情:

1)从第二个表中断开切片机 2)更新两个表的源数据 3)刷新数据透视表 4)将切片机连接回第二个表

我最终得到了下面的编码,它能够让我通过删除切片器连接来解决我一直遇到的所有问题,以便数据可以更新,保持两个表之间的数据库缓存相同,以便切片器可以重新连接&最后更新了表源数据并重新连接切片器。

我确信有更干净的方法来完成所有这些,但我仍然对这一切都很陌生:)

'Refresh tables
    Worksheets("TBD v. Assigned").PivotTables("TBDvAssign").RefreshTable
    Worksheets("TBD v. Assigned").PivotTables("FullView").RefreshTable

'Remove slices from pivot table 2
    ActiveWorkbook.SlicerCaches("Slicer_Country").PivotTables.RemovePivotTable _(Worksheets("TBD v. Assigned").PivotTables("FullView"))
    ActiveWorkbook.SlicerCaches("Slicer_Project").PivotTables.RemovePivotTable (Worksheets("TBD v. Assigned").PivotTables("FullView"))
    ActiveWorkbook.SlicerCaches("Slicer_Region").PivotTables.RemovePivotTable (Worksheets("TBD v. Assigned").PivotTables("FullView"))
    ActiveWorkbook.SlicerCaches("Slicer_Role").PivotTables.RemovePivotTable (Worksheets("TBD v. Assigned").PivotTables("FullView"))
    ActiveWorkbook.SlicerCaches("Slicer_Sponsor").PivotTables.RemovePivotTable (Worksheets("TBD v. Assigned").PivotTables("FullView"))

'Update pivot cache of pivot table 1 & refresh
    Worksheets("TBD v. Assigned").PivotTables("TBDvAssign").ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData)
    Worksheets("TBD v. Assigned").PivotTables("TBDvAssign").RefreshTable

'Update pivot cache of pivot table 2 to be the same as pivot table 1 & update
    Worksheets("TBD v. Assigned").PivotTables("Full").ChangePivotCache ("TBDvAssign")
    Worksheets("TBD v. Assigned").PivotTables("Full").RefreshTable

'Assign slicers back to pivot table 2
    ActiveWorkbook.SlicerCaches("Slicer_Country").PivotTables.AddPivotTable (Worksheets("TBD v. Assigned").PivotTables("FullView"))
    ActiveWorkbook.SlicerCaches("Slicer_Project").PivotTables.AddPivotTable (Worksheets("TBD v. Assigned").PivotTables("FullView"))
    ActiveWorkbook.SlicerCaches("Slicer_Region").PivotTables.AddPivotTable (Worksheets("TBD v. Assigned").PivotTables("FullView"))
    ActiveWorkbook.SlicerCaches("Slicer_Role").PivotTables.AddPivotTable (Worksheets("TBD v. Assigned").PivotTables("FullView"))
    ActiveWorkbook.SlicerCaches("Slicer_Sponsor").PivotTables.AddPivotTable (Worksheets("TBD v. Assigned").PivotTables("FullView"))