2017-03-21 78 views
0

我在工作簿中有2个数据透视表,我有以下代码来动态更改数据源并刷新数据透视表。代码运行良好,因为它循环遍历第一个循环并刷新第一个数据透视表。然而,当循环第二透视表,代码崩溃在pt.ChangePitvotCache一个错误:运行时错误'5':无效的porcedure调用或参数

Run-time error = '5': invalid procedure call or argument"

有谁能够尽快我有超过1 Pivot-帮助为什么这不工作代码中的表?

Dim ws As Worksheet 
Dim pvtCache As PivotCache 
Dim pt As PivotTable 
Dim newRange As String 

Set DataSource = DataSht.Range("A1", DataSht.Range("A1").End(xlToRight).End(xlDown)) 

newRange = DataSht.Name & "!" & DataSource.Address(ReferenceStyle:=xlR1C1) 

Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=newRange) 

For Each ws In ActiveWorkbook.Worksheets 
    For Each pt In ws.PivotTables 
     pt.ChangePivotCache pvtCache 
     pt.RefreshTable 
    Next pt 
Next ws 

回答

0

你需要“重置” pvtCache将其设置为第一PivotTable后。

所以你需要SetpvtCache和“重置”它在For Each pt In ws.PivotTables循环内。

尝试下面的代码:

For Each ws In ActiveWorkbook.Worksheets 
    For Each pt In ws.PivotTables 
     Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=newRange) 
     pt.ChangePivotCache pvtCache 
     pt.RefreshTable 
     Set pvtCache = Nothing 
    Next pt 
Next ws 
+0

感谢Shai,您的建议很有效,但只有在第二个PT不与第一个PT共享PivotCache的情况下。我现在在一张新纸上添加了一个克隆的PT,现在代码在第一个For Each pt在ws.PivotTables循环中给出了这个错误... – Mike

+0

实际上它也适用于这种情况,你是否先删除set pvtCache循环? –

+0

我在循环之前删除了pvtCache,但仍然收到相同的错误。我已经设法缩小了这个问题的范围,看起来只有当连接到克隆的数据透视表的切片器出现问题时 – Mike

0

得到周围具有由数据源中的枢轴表的源转换为一个表,并改变为表名生成数据集中的每个时间改变PivotCache。

Activesheet.ListObjects.Add(xlSrcRange, Range(Cells(1, "A").End(xlDown), Cells(1, "A").End(xlToRight)), , xlYes).Name = "DataTable" 
相关问题