同一张Excel表中的两张数据透视表

问题描述:

我已经在源数据的同一张表中创建了一张数据透视表。现在,我想在同一张表中使用相同的数据源创建第二个数据透视表,但在透视表内(当然)使用不同的打印数据。我一直收到一个错误,因为它表示数据透视表不能覆盖另一个数据透视表。但是,他们的方式我选择了数据透视表创建的范围,它们不会互相覆盖。我也手动测试过。另外,如果我记录过程,它只是使用源数据的准确参考,我不想使用该参数,因为每天都会更改lastrow和lastcolumn。为了提醒一下,这个宏很适合创建第一个表格。第二个表是问题。下面,我将提供我现在的代码。同一张Excel表中的两张数据透视表

Dim DSheet As Worksheet 
Dim PCache As PivotCache 
Dim PTable1 As PivotTable 
Dim PTable2 As PivotTable 
Dim PRange As Range 

Application.DisplayAlerts = True 
Set DSheet = Worksheets("Budget_Report") 

Set PRange = DSheet.Range(Cells(1, 53), Cells.SpecialCells(xlCellTypeLastCell)) 

Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange) 
Set PTable1 = PCache.CreatePivotTable(TableDestination:=DSheet.Cells(4, 1), TableName:="PivotTable1") 
Set PTable2 = PCache.CreatePivotTable(TableDestination:=DSheet.Cells(17, 2), TableName:="PivotTable2") 

With ActiveSheet.PivotTables("PivotTable1") 

    With .PivotFields("T-Lane") 
    .Orientation = xlRowField 
    .Position = 1 
    .Subtotals(1) = True 
    .Subtotals(1) = False 
    End With 

    With .PivotFields("Monthly Cost FCST") 
    .Orientation = xlDataField 
    .Position = 1 
    .Function = xlAverage 
    .Caption = "Monthly Cost Forecast" 
    End With 

End With 

With ActiveSheet.PivotTables("PivotTable2") 

    With .PivotFields("Oran") 
    .Orientation = xlRowField 
    .Position = 1 
    .Subtotals(1) = True 
    .Subtotals(1) = False 
    End With 

    With .PivotFields("Monthly Cost FCST") 
    .Orientation = xlDataField 
    .Position = 1 
    .Function = xlAverage 
    .Caption = "Monthly Cost Forecast" 
    End With 

End With 
+0

如果没有看到您的数据,很难判断数据透视表是否或如何重叠。为什么使用代码来创建数据透视表?数据透视表的想法是只有数据发生变化,因此数据透视表定义保持不变,您只需刷新它们即可。另外,请考虑使用Excel表对象作为数据透视表的源,然后数据源将动态增长和减少。有关此主题的书籍已经撰写,因此您可能希望对数据透视表和动态数据源进行更多的研究和学习。 – teylyn

+0

@teylyn感谢您的反馈!我想自动创建它们,因为这个宏将每天在不同的工作簿中运行。 (我会复制粘贴它每天到其他工作表! –

当插入第一枢轴表和填充的第一个之前插入另一个,所述第一枢转表的空的透视表范围占据目的地小区[DSheet.Cells(17,2)]的第二数据透视表。

我想你应该插入第一个数据透视表并填充它,然后再插入另一个并填充它。

看看是否可以解决您的问题。

Dim DSheet As Worksheet 
Dim PCache As PivotCache 
Dim PTable1 As PivotTable 
Dim PTable2 As PivotTable 
Dim PRange As Range 

Application.DisplayAlerts = True 
Set DSheet = Worksheets("Budget_Report") 

Set PRange = DSheet.Range(Cells(1, 53), Cells.SpecialCells(xlCellTypeLastCell)) 

Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange) 
Set PTable1 = PCache.CreatePivotTable(TableDestination:=DSheet.Cells(4, 1), TableName:="PivotTable1") 

With ActiveSheet.PivotTables("PivotTable1") 

    With .PivotFields("T-Lane") 
    .Orientation = xlRowField 
    .Position = 1 
    .Subtotals(1) = True 
    .Subtotals(1) = False 
    End With 

    With .PivotFields("Monthly Cost FCST") 
    .Orientation = xlDataField 
    .Position = 1 
    .Function = xlAverage 
    .Caption = "Monthly Cost Forecast" 
    End With 

End With 

Set PTable2 = PCache.CreatePivotTable(TableDestination:=DSheet.Cells(17, 2), TableName:="PivotTable2") 

With ActiveSheet.PivotTables("PivotTable2") 

    With .PivotFields("Oran") 
    .Orientation = xlRowField 
    .Position = 1 
    .Subtotals(1) = True 
    .Subtotals(1) = False 
    End With 

    With .PivotFields("Monthly Cost FCST") 
    .Orientation = xlDataField 
    .Position = 1 
    .Function = xlAverage 
    .Caption = "Monthly Cost Forecast" 
    End With 

End With 
+0

,这是完美的作品! –

+0

很高兴它的工作。:) – sktneer

+0

@sktneer只是好奇你为什么你没有使用你的'Pivot'对象后,你设置它们?而不是'With ActiveSheet.PivotTables(“PivotTable1”)''你可以使用'With PTable1',对于“PivotTable2”也是一样的 –

MSDN doc on pivot tables

重要” 如果你在Excel中 工作表中定义多个数据透视表,可能生成的表可以增长和重叠 彼此如果Activity返回一个大数据集。在这种情况下,当您刷新数据时,您将收到“数据透视表报表不能重叠另一个 数据透视表”。您可以通过将数据透视表之间的添加列或行添加到 来更正此错误,从而允许这些表的增长不会重叠。