我正在使用XLS VBA代码基于命名范围创建数据透视表。 当我在调用CreatePivotTable时收到错误代码时,我注意到从未创建过PivotCache。我不知道原因。有没有办法深入研究PivotCaches。创建错误?
我已经尝试定义SourceData
各种声明(wBk as Workboook
,wSh as WorkSheet
,kchPivot as PivotCache
,piPivot as PivotTable
,DataSourceRge as Range
,DataSourceString as String
...)
Set wBk = ActiveWorkbook
Set wSh = wBk.Sheets("MP_1_30")
Set DataSourceRge = Range("MP_1_30_Type_Ctl")
A)这不起作用
Set kchPivot = wBk.PivotCaches.Create (xlDataBase, DataSourceRge)
B)这也不起作用
DataSourceString = wSh.Name & "!" & _
DataSourceRge.Address(ReferenceStyle:=xlR1C1)
Set kchPivot = wBk.PivotCache.Create (xlDataBase, DataSourceString)
重要提示:DataSourceRge是一列范围(nb:我要为其自动创建数据透视表的所有范围都是1列宽)
我放置以下控件来确定PivotCache的创建
MsgBox wBk.PivotCaches.Count
我总是收到“ 0”(无),但希望得到“ 1”
答案 0 :(得分:0)
由于您没有收到任何报告的错误消息,因此我认为问题在于您没有创建使用该数据透视缓存的任何“显示项” (数据透视表,数据透视图等) 。我用代码做了一些测试。您应该可以使用所附的代码复制我的结果,并且数据设置如下图所示。
使用新的工作簿在Sheet1的A列中添加示例数据,然后添加第二个工作表(注意:我的代码使用工作表的代码名称,因此,如果您不是从全新的工作簿开始,则可能需要进行更改工作表变量分配中的代号
在代码中,我有两个位置使用MsgBox来获取数据透视缓存的数量。两者都是在“创建”数据透视表之后。一个是在使用该缓存创建数据透视表之前,另一个是在之后。
运行代码时,第一个MsgBox显示为“ 0”;而第二个MsgBox显示为“ 1”。
尽管如此,我找不到有关此现象的文档。我的假设如下:
为帮助防止Excel文件变得肿,有一个自动化过程可以清除未使用的数据透视缓存-即没有任何关联项(数据透视表,数据透视图等)的数据透视缓存-和/或防止数据透视缓存在将显示项目与之关联之前完成。
因此,要完全创建并最终确定数据透视缓存,还必须使用该数据透视缓存创建至少一个所需的显示项。
如果由于某种原因,您真的无法在创建数据透视缓存时创建任何所需的显示项,我的建议是在一个非常隐蔽的工作表上创建一个“虚拟”显示项,添加后可以将其删除该数据透视缓存的一些实际显示项。 (仅供参考:在我的测试中,我尝试创建一个虚拟显示项目,然后立即将其删除。这也导致了数据透视缓存的自动删除。) >
Sub test()
Set wBk = ThisWorkbook
Set wsh = Sheet1
Set sht2 = Sheet2
fRow = 1
fCol = 1
lRow = 5
lCol = 1
Set kchPivot = wBk.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wsh.Range(wsh.Cells(fRow, fCol), wsh.Cells(lRow, lCol)))
MsgBox wBk.PivotCaches.Count 'Does not increment for newly created pivotcache with no associated display items
With kchPivot
.CreatePivotTable TableDestination:=sht2.Range("D3"), TableName:="Performance"
End With
MsgBox wBk.PivotCaches.Count 'Increments for pivotcache now associated with a pivottable
End Sub