【问题标题】:vba to create pivot tablevba 创建数据透视表
【发布时间】:2021-03-16 01:29:43
【问题描述】:

亲爱的 我正在处理一个数据透视表,顺便说一下,我是 PT 的新手,我尝试录制宏并尝试对其进行编辑,但它失败了,所以我需要你的帮助。

所需的结果如下图所示,位于包含源数据的同一工作簿的另一张工作表中

源数据如下图所示,来自同一工作簿中的另一张工作表,顺便说一下,它只是导致上述结果数据的整个数据的一部分。

Sub Generate_Ter()

'Declare Variables
Dim PSheet As Worksheet
Dim DSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As PivotTable
Dim PRange As Range
Dim LastRow As Long
Dim LastCol As Long

Set PSheet = Worksheets("New")
Set DSheet = Worksheets("Data")
enter code here
Dim rg2 As Range
With DSheet
Set rg2 = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
rg2.Offset(0, 6).Value = 1
rg2.Resize(rg2.Rows.Count, 7).Name = "PRange"

'Define Pivot Cache
    
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "PRange", Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:=PSheet.Range("P1"), TableName:="ptTmp2", DefaultVersion _
        :=xlPivotTableVersion14
        
        With DSheet.PivotTables("ptTmp2").PivotFields("SKU Name")
        .Orientation = xlRowField
        .Position = 2
        .Subtotals = Array _
        (False, False, False, False, False, False, False, False, False, False, False, False)
    End With
    
    With DSheet.PivotTables("ptTmp2").PivotFields("SKU Code")
        .Orientation = xlRowField
        .Position = 3
        .Subtotals = Array _
        (False, False, False, False, False, False, False, False, False, False, False, False)
    End With
    
    
With DSheet.PivotTables("ptTmp2")
    .AddDataField DSheet.PivotTables("ptTmp2"). _
        PivotFields("1"), "BSS Count", xlCount
    .RowAxisLayout xlTabularRow
    .RepeatAllLabels xlRepeatLabels
    .ColumnGrand = False
    .ShowTableStyleRowHeaders = False
    .TableRange1.Copy
    End With
    
    PSheet.Range("A9").PasteSpecial Paste:=xlPasteValues
    PSheet.Range("A9").PasteSpecial Paste:=xlPasteFormats

End With

End Sub

【问题讨论】:

  • 错误信息是什么,在哪一行代码?
  • 运行时错误'1004' 数据透视字段名称无效,要创建数据透视报表,您必须使用组织为带有标签列的列表的数据。如果要更改数据透视表字段的名称,则必须为该字段键入一个新名称..(错误行包含:ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData "PRange", Version:=xlPivotTableVersion14 ).CreatePivotTable _ TableDestination:=PSheet.Range("P1"), TableName:="ptTmp2", DefaultVersion _ :=xlPivotTableVersion14)
  • "PRange" 看起来不像 SourceData 的有效参数。

标签: excel vba pivot pivot-table


【解决方案1】:

编辑代码后解决如下, 错误在于定义源数据和选择空白列

所以

rg2.Offset(0, 6).Value = 1
rg2.Resize(rg2.Rows.Count, 7).Name = "PRange"

改为

rg2.Offset(0, 4).Value = 1
rg2.Resize(rg2.Rows.Count, 5).Name = "Sdata"

'Define Pivot Cache

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Sdata", Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:=DSheet.Range("P1"), TableName:="ptTmp2", DefaultVersion _
        :=xlPivotTableVersion14

及以下代码

    With DSheet.PivotTables("ptTmp2").PivotFields("SKU Name")
    .Orientation = xlRowField
    .Position = 2
    .Subtotals = Array _
    (False, False, False, False, False, False, False, False, False, False, False, False)
End With

With DSheet.PivotTables("ptTmp2").PivotFields("SKU Code")
    .Orientation = xlRowField
    .Position = 3
    .Subtotals = Array _
    (False, False, False, False, False, False, False, False, False, False, False, False)
End With

改为

With DSheet.PivotTables("ptTmp2").PivotFields("SKU Name")
        .Orientation = xlRowField
        .Position = 1
        .Subtotals = Array _
        (False, False, False, False, False, False, False, False, False, False, False, False)
    End With
    
    With DSheet.PivotTables("ptTmp2").PivotFields("SKU Code")
        .Orientation = xlRowField
        .Position = 2
        .Subtotals = Array _
        (False, False, False, False, False, False, False, False, False, False, False, False)
    End With

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多