分享PivotCache for PivotTables使用数据模型构建

Chr*_*ris 8 excel vba pivot-table excel-vba

我只是清理我的工作簿,并使用以下代码来整合我的PivotCaches(在清理之前我有大约200个).

Sub changeCache()
Dim ws As Worksheet
Dim pt As PivotTable
Dim pc As PivotCache
Dim first As Boolean
On Error Resume Next

    For Each ws In ActiveWorkbook.Worksheets
        ws.Activate
        For Each pt In ActiveSheet.PivotTables

            If first = False Then
                Set pc = pt.PivotCache
                first = True
            End If 

            pt.CacheIndex = pc.Index

        Next pt
    Next ws

End Sub
Run Code Online (Sandbox Code Playgroud)

这使我的PivotCache数量减少到33.

Sub CountCaches()
  MsgBox ActiveWorkbook.PivotCaches.Count
End Sub
Run Code Online (Sandbox Code Playgroud)

它是33而不是1的原因是因为我有32个使用数据模型构建的数据透视表.

我的问题是:有谁知道如何更改使用数据模型构建的数据透视表以使用相同的PivotCache?

编辑

我的第二个问题是:多个数据透视表都建立在数据模型上

a)引用单一数据模型; 要么

b)每个都有自己的模型,因此"膨胀"Excel文件

EDIT2

在进一步探索时,似乎数据模型为引用相同数据的数据透视表共享的.这可以在"连接"中找到(位于功能区的"数据"选项卡下).理论上,即使代码ActiveWorkbook.PivotCaches.Count计算共享连接的每个数据透视表并且错误地(?)表示多个缓存,这也不应该"膨胀"文件.

但是,如果有人可以提供更明确的答案,我会将赏金保留.

小智 2

如果我正确理解你的问题,你只需将每台电脑设置为第一台即可。因此,第一遍,给 pc 一些其他名称,例如 pcfirst,然后对于每个剩余的缓存,设置 pc=pcfirst。一些源信息在这里http://www.contextures.com/xlPivot11.html和这里http://www.mrexcel.com/forum/excel-questions/380933-set-multiple-pivot-cache-read-one-cache .html