经过测试,有点概念了。看看对不对。 附件依次执行下列语句 Sub Test1() ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R23C3").CreatePivotTable TableDestination:= _ "[数据透视表.xls]Sheet2!R3C1", TableName:="数据透视表1", DefaultVersion:= _ xlPivotTableVersion10 End Sub Sub Test2() ActiveWorkbook.PivotCaches(1).CreatePivotTable TableDestination:= _ "[数据透视表.xls]Sheet3!R3C1", TableName:="数据透视表1", DefaultVersion:= _ xlPivotTableVersion10 End Sub Sub Test3() MsgBox ActiveWorkbook.PivotCaches.Count End Sub 建立一个数据透视表必须基于一个缓存。这个缓存可以另外建立,也可以利用现成的。 上述Test1就是新建了一个数据透视表,也新建了一个缓存。数据透视表存放在Sheet2中。 上述Test2也新建了一个数据透视表,但是利用了Test1中创建的缓存(因为两者拥有共同的数据区域和类型),放在了Sheet3。 Test3返回的缓存结果就是1。 可见,数据透视表是存放在不同工作表中,但是都是基于一个缓存建立的。可以得到结论,缓存不是依赖于数据透视表存放的。因为如果依赖于透视表,那么两张透视表应该有两个缓存。那么是否存放在其中一个透视表中呢,或者初始的那个透视表中?不会,因为无论先删除哪个,Test3始终是1,直到都删除了才会成为0。 那么缓存存放在哪里呢? 我估计不依赖于任何一个表,而是存放在工作簿中的。因为我们可以把Sheet1删除(数据源),Sheet2和Sheet3中的透视表进行一下布置,再双击最右下角那个汇总呢?是不是数据源又出来了?那么缓存就是存放在工作簿的数据中,而不是单独存放在某个表中。 那么要删除缓存该怎么做呢?目前我知道的就是删除所有该缓存建立的透视表。可以联想,缓存虽然没有存放在数据透视表中,但和透视表还是有关联的,透视标的删除可能会触发该缓存的删除。 这样的解答也就意味着你那两个设想是没办法实现的。
Nuvpdr0i.rar
(6.24 KB, 下载次数: 1)
|