我只是在清理我的工作簿,并且使用了以下代码来整合我的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
这使我的PivotCache数量减少到33。
Sub CountCaches()
MsgBox ActiveWorkbook.PivotCaches.Count
End Sub
它是33而不是1的原因是因为我有32个使用数据模型构建的数据透视表。
我的问题是:有谁知道如何更改使用数据模型构建的数据透视表,所有人都使用相同的PivotCache?
修改
我的第二个问题是:多个数据透视表都建立在数据模型上
a)引用单一数据模型;或
b)每个人都有自己的模型,因此“膨胀”了Excel文件
EDIT2
在进一步探索中,似乎对引用相同数据的数据透视表共享数据模型 。这可以在“连接”中找到(位于功能区的“数据”选项卡下)。理论上,即使代码ActiveWorkbook.PivotCaches.Count
计算共享连接的每个数据透视表并且错误地(?)表示多个缓存,这也不应该“膨胀”文件。
答案 0 :(得分: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
答案 1 :(得分:1)
我还没有真正习惯数据模型,我无法对此提供无疑的解释。
但是我使用该代码来清理我正在处理的报告系统之一,这可能会帮助您减少数据透视表的数量:
Sub Caches_Matches()
Dim Ws1 As Worksheet, _
Pt1 As PivotTable, _
Ws2 As Worksheet, _
Pt2 As PivotTable, _
PcNb As Integer
PcNb = ActiveWorkbook.PivotCaches.Count
MsgBox "PivotCaches.Count = " & PcNb, vbInformation + vbOKOnly, "Before update"
On Error Resume Next
For Each Ws1 In ActiveWorkbook.Worksheets
For Each Pt1 In Ws1.PivotTables
'fix one pt, loop all of them and set same cache if same source
For Each Ws2 In ActiveWorkbook.Worksheets
For Each Pt2 In Ws2.PivotTables
If Pt1.SourceData <> Pt2.SourceData Or Pt1.PivotCache = Pt2.PivotCache Or Pt1.Name = Pt2.Name Then
Else
Pt2.CacheIndex = Pt1.PivotCache.Index
End If
Next Pt2
Next Ws2
Next Pt1
Next Ws1
MsgBox "PivotCaches.Count = " & ActiveWorkbook.PivotCaches.Count & Chr(10) & _
"Before update = " & PcNb, vbInformation + vbOKOnly, "After update"
End Sub