首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过VBA创建枢轴表,但我可以从相同的数据源手动创建枢轴表。

无法通过VBA创建枢轴表,但我可以从相同的数据源手动创建枢轴表。
EN

Stack Overflow用户
提问于 2021-08-24 03:57:48
回答 1查看 116关注 0票数 0
代码语言:javascript
复制
    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 :我可以从同一个数据源手动创建枢轴表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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要容易得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68901597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档