【发布时间】:2019-08-29 11:44:09
【问题描述】:
我有一个宏,可以将我的工作簿中的两张工作表复制到他们自己的工作簿中。一张表有一些数据定义了一个命名范围,第二张表有多个数据透视表,所有数据源都称为命名范围candData。
一旦工作表复制了我的切片器,它们的一些报表连接就会丢失。
为了重新连接它们,我必须手动选择每个数据透视表并再次设置数据源,即使数据源已经设置。 (我只需单击 Change Data Source 并立即单击 OK,实际上 没有更改任何内容。)
为每个数据透视表完成此操作后,所有报表连接都会再次显示。
我有以下宏循环遍历每个数据透视表并重新应用数据源,然后重新连接每个切片器连接,但是即使在应用数据源之后,我仍然必须手动选择每个数据透视表才能重新连接切片机。
我没有收到任何错误,它按预期逐步遍历每个数据透视表并重置数据源。为什么报表连接仅在我手动设置数据源而不是通过以下设置时才起作用的任何线索?
Sub setSlicerSource()
Dim MyPivot As PivotTable
Dim slCaches As SlicerCaches
Dim slCache As SlicerCache
Set slCaches = ActiveWorkbook.SlicerCaches
With ActiveWorkbook
For Each MyPivot In .Sheets("Pivots").PivotTables
MyPivot.ChangePivotCache .PivotCaches.Create(SourceType:=xlDatabase, SourceData:="candData")
Next MyPivot
For Each slCache In slCaches
For Each MyPivot In .Sheets("Pivots").PivotTables
slCache.PivotTables.AddPivotTable MyPivot
Next MyPivot
Next slCache
End With
End Sub
【问题讨论】:
-
我没有使用太多切片器,但是......在更新切片器之后再做一个
PivotTable.RefreshTable怎么样(即使更改数据透视缓存在逻辑上似乎也会这样做)。另外,this 如果您还没有看到它,它似乎很有用。 -
感谢您提供该链接。我在更新每个数据源后尝试了表刷新,通过 VBA 处理数据透视表的每一种方式都不会令人讨厌。当我看似手动设置数据源时,它只会进行“硬”刷新。
-
手动设置数据透视表的数据源时,Excel 将自动重用默认情况下覆盖相同范围的现有数据透视缓存。您的代码为每个数据透视表创建一个新的数据透视缓存,这首先会扩大文件的大小,但也可能导致跨多个缓存的切片器出现问题。您是否尝试过先创建一个缓存,然后将所有数据透视表设置为使用该缓存?
-
我同意@Michael,你只需要一个数据透视缓存
-
我还没有尝试过,主要是因为我认为我不明白,当这张表首先被复制时,肯定已经创建了一个数据透视缓存吗?我认为表刷新会更新这个数据透视缓存,但这似乎没有发生。有没有办法删除一个数据透视缓存并创建一个新的?