Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2703|回复: 5

[已解决]关于数透缓存数量两问

[复制链接]
发表于 2009-12-4 15:10 | 显示全部楼层 |阅读模式

我的工作表中有两个数据透视表,print activeworkbook.pivotcache.count得到的结果是2,用什么代码可以使结果转变1?不能删数透表哦

另外,print activeworkbook.pivotcache.count得到的是整个工作薄的缓存数量,可否有方法得到比如sheet1工作表中的数据透视表缓存数量呢?

实在太菜了我。。。[em04]

最佳答案
2009-12-4 16:28

经过测试,有点概念了。看看对不对。

附件依次执行下列语句

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)
发表于 2009-12-4 15:30 | 显示全部楼层

不明白缓存数量啥意思。下面这个统计一张表格中数据透视表的个数行不?

MsgBox Sheet1.PivotTables.Count

回复

使用道具 举报

 楼主| 发表于 2009-12-4 15:58 | 显示全部楼层

pivotcache的数目啊,你这个是数据透视表的数量,如果sheet1中这两个数据透视表共用一个pivotcache的话,很显然数据透视表的数量就不等于数据透视表缓存的数量了啊

我想要单单一个工作表中的所有透视表的缓存数量呀,不是一个工作薄中的所有透视表的缓存数量

MsgBox Sheet1.Pivotcaches.Count肯定是编译错误,

只能 MsgBox ActiveWorkbook.PivotCaches.Count

[此贴子已经被作者于2009-12-4 15:59:45编辑过]
回复

使用道具 举报

发表于 2009-12-4 16:01 | 显示全部楼层

MsgBox Sheet1.PivotTables.Count

这句其实是可以的。

缓存是如何建立的呢?对这个还真没研究过。

回复

使用道具 举报

 楼主| 发表于 2009-12-4 16:04 | 显示全部楼层

阿木老师,3楼写错了,小改了一下,我就是想要“那个”[em04]

回复

使用道具 举报

发表于 2009-12-4 16:28 | 显示全部楼层    本楼为最佳答案   

经过测试,有点概念了。看看对不对。

附件依次执行下列语句

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)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-6 23:55 , Processed in 0.285006 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表