Excel 运行时错误';5';:无效的过程调用或参数
我的工作簿中有两个数据透视表,我有以下代码来动态更改数据源和刷新数据透视表。代码在每个pt循环的第一个Excel 运行时错误';5';:无效的过程调用或参数,excel,pivot-table,vba,Excel,Pivot Table,Vba,我的工作簿中有两个数据透视表,我有以下代码来动态更改数据源和刷新数据透视表。代码在每个pt循环的第一个循环中运行良好,并且第一个透视表被刷新。但是,当为第二个透视表循环时,代码在pt.ChangePitvotCache处崩溃,并出现错误: 运行时错误='5':过程调用或参数无效 当我的代码中有一个以上的透视表时,有人能帮助我解释为什么这不起作用吗 Dim ws As Worksheet Dim pvtCache As PivotCache Dim pt As PivotTable Dim new
循环中运行良好,并且第一个透视表被刷新。但是,当为第二个透视表循环时,代码在pt.ChangePitvotCache
处崩溃,并出现错误:
运行时错误='5':过程调用或参数无效
当我的代码中有一个以上的透视表时,有人能帮助我解释为什么这不起作用吗
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
将pvtCache
设置为第一个数据透视表后,需要“重置”它
因此,您需要为ws.PivotTables
循环中的每个pt设置pvtCache
并在中“重置”它
请尝试以下代码:
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
通过将数据源转换为表并将数据透视表的源更改为表名,避免了每次生成数据集时都必须更改数据透视缓存的问题
Activesheet.ListObjects.Add(xlSrcRange, Range(Cells(1, "A").End(xlDown), Cells(1, "A").End(xlToRight)), , xlYes).Name = "DataTable"
谢谢Shai,您的建议有效,但仅在第二个PT与第一个PT不共享数据透视缓存的情况下有效。我现在在新工作表上添加了一个克隆的PT,现在代码在ws.PivotTables循环中的每个PT的第一个PT上都给出了该错误…实际上它也适用于这种情况,您是否在循环之前删除了set-pvtCache?我已经删除了我在循环之前跳过了pvtCache,但仍然得到了相同的错误。我已经设法缩小了问题的范围,似乎只有当有切片器连接到克隆的数据透视表时,问题才会出现。所有工作表中的所有数据透视表都共享相同的数据透视缓存?是的,只有两个表共享相同的cac他说。我刚刚找到了解决问题的方法。我添加了一行代码,使源数据在每次刷新时都成为表,并将数据透视表链接到表名,因此我现在不需要更改数据透视缓存。感谢您的帮助!