我遇到了一个问题,我遇到了问题。我在一个工作表上有两个数据透视表,它们都使用相同的数据源,但提供了不同的数据“视图”。但是,一个表链接到数据透视图,并且两个表都连接到几个切片器。当我删除其中一个表(和相关的编码)时,宏工作正常,但如果我重新添加另一个数据透视表,我收到“运行时错误'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
答案 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"))