我正在使用以下代码:
Sub MakeAPivotTable()
Dim pt As PivotTable
Dim cacheOfpt1 As PivotCache 'This is the Source Data
Dim pf As PivotField
Dim pi As PivotItem
Dim LastCol As Long
Dim LastRow As Long
Dim PRange As Range
LastCol = Sheets("Sheet2").Range("A1").SpecialCells(xlCellTypeLastCell).Column
LastRow = Sheets("Sheet2").Range("A1").SpecialCells(xlCellTypeLastCell).Row
Set PRange1 = Sheets("Sheet2").Cells(1, 1).Resize(LastRow, LastCol)
On Error GoTo err_add_Y_next_row
Sheets("Sheet3").Select
ActiveSheet.PivotTables("PivotTable1").TableRange2.Clear 'Delete any Pivot Table
'set the cache of PT
Sheets("Sheet2").Select
Set cacheOfpt1 = ActiveWorkbook.PivotCaches.Create(xlDatabase, PRange1)
'create the pt
Sheets("Sheet3").Select
Set pt = ActiveSheet.PivotTables.Add(cacheOfpt1, Range("a1"), "PivotTable1")
'put the Fields in
With pt
'add the Fields
.PivotFields("CAMPAIGN").Orientation = xlRowField
'.PivotFields("TAG1").Orientation = xlRowField
'.PivotFields("TAG2").Orientation = xlRowField
'.PivotFields("TAG3").Orientation = xlRowField
.PivotFields("CIRN").Orientation = xlColumnField
.PivotFields("RUN").Orientation = xlPageField 'Column Filter
.PivotFields("TVSN").Orientation = xlDataField 'Value Field
'set the number format
.DataBodyRange.NumberFormat = "#,##0.00"
'go to classic View
.RowAxisLayout xlTabularRow
End With
err_add_Y_next_row:
MsgBox Err.Number & Err.Description, _
vbExclamation, "VBAtools.pl"
End Sub
但是当我运行代码时,我收到错误“数据透视表字段名称无效。要创建数据透视表报告,您必须使用组织为带有标记列的列表的数据,如果您是更改数据透视表字段的名称,您必须为该字段键入新名称。“
此代码运行正常。但突然间我开始收到这个错误。
任何人都可以帮我找到原因。
谢谢。
答案 0 :(得分:2)
尝试使用ListObject
(“表”)而不是Range
作为数据源;这些始终是数据透视表的有效数据源 - 请参阅this SO question - OP没有遇到与您相同的问题,但我相信同样的解决方案适用。
tables 始终是有效来源的原因是因为它们始终具有有效的标头,并且它们始终至少有一行数据。
将范围转换为表格(并称之为“Table1”)之后,您可以像这样使用它:
Set cacheOfPt1 = ActiveWorkbook.PivotCaches.Create(xlDatabase, "Table1")
如果缓存使用的是有效的数据源,那么完全按照Set pt
执行操作应该没有问题:
Set pt = ActiveSheet.PivotTables.Add(cacheOfpt1, Range("a1"), "PivotTable1")
此外,通过此设置,您可能需要重新考虑每次都从头开始完全重建数据透视表的需要;您只需在“Table1”中添加/删除数据,然后刷新您的数据透视表 - 它将自动更新以反映“Table1”的内容。