Sub CreatePivot()
Dim NewSheet As Worksheet
Dim PTCache As PivotCache
Dim PT As PivotTable
Dim PTRange As Range
Dim FinalRow As Long
Dim FinalCol As Long
Set NewSheet = Workbooks("東京威力_樞紐分
析.xlsm").Sheets.Add(Before:=Workbooks("東京威力_樞紐分
析.xlsm").Worksheets(1))
NewSheet.Name = "Summary"
For Each PT In NewSheet.PivotTables
PT.TableRange2.Clear
Next PT
Set PTRange = getTable("Table1").Range
'Create PivotCaches
Set PTCache = Workbooks("東京威力_樞紐分
析.xlsm").PivotCaches.Create(SourceType:=xlDatabase,
SourceData:=PTRange.Address)
'Create PivotTable
Set PT =
PTCache.CreatePivotTable(TableDestination:=NewSheet.Cells(2,
2),tableName:="PivotTable1")
'ManualUpdate On
PT.ManualUpdate = True
PT.AddFields RowFields:=Array("Recharge BU", "Main Category"),
ColumnFields:="Recharge To"
With PT.PivotFields("Hours")
.Orientation = xlDataField
.Function = xlSum
.Position = 1
.NumberFormat = "#,##0.00"
.Name = "Total - Hours"
End With
'Calcu PivotTable
PT.ManualUpdate = False
PT.ManualUpdate = True
End Sub
-------------------------------------------------------------------------
Function getTable(tableName As String) As ListObject
Dim FinalRow As Long
With Workbooks("東京威力_樞紐分析.xlsm").Worksheets("原始資料")
On Error GoTo ErrorHandler
FinalRow = .Cells(Rows.Count, 1).End(xlUp).row
Set getTable = .ListObjects(tableName)
End With
Exit Function
ErrorHandler:
Debug.Print Err.Number; ":" & Err.Description
If getTable Is Nothing Then
Workbooks("東京威力_樞紐分析.xlsm").Worksheets("原始資料").ListObjects.Add(xlSrcRange,
Workbooks("東京威力_樞紐分析.xlsm").Worksheets("原始資料").Range("A1:AK" & FinalRow), , xlYes).Name = "Table1"
Set getTable = Worksheets("原始資料").ListObjects(tableName)
End If
Resume Next
End Function嗨,各位,代码的目的是创建枢轴表。但我收到了错误消息:“PivotTable字段名无效。若要创建PivotTable报表,必须使用组织为带有标记列的列表的数据。如果要更改PivotTable字段的名称,则必须键入“创建数据透视表时”字段的新名称。(在line==> PTCache.CreatePivotTable)
有什么可能会出错?谢谢
PS :我可以从同一个数据源手动创建枢轴表。
发布于 2021-08-24 06:14:59
SourceData:=PTRange.Address将给出没有工作表名称的单元格地址,例如$C$7:$G$17。这不适用于PT。
SourceData需要带工作表名称的范围引用。

因此,它应该是SourceData:= PTRange.Parent.Name & "!" & PTRange.Address。但是,如果工作表名称包含空格,则应该是SourceData:= "'" & PTRange.Parent.Name & "'!" & PTRange.Address。
由于数据包含在命名范围Table1中,因此使用名称作为SourceData要容易得多。

https://stackoverflow.com/questions/68901597
复制相似问题