Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 同一excel工作表中的两个数据透视表_Vba_Excel_Pivot Table - Fatal编程技术网

Vba 同一excel工作表中的两个数据透视表

Vba 同一excel工作表中的两个数据透视表,vba,excel,pivot-table,Vba,Excel,Pivot Table,我已经用源数据在同一张表中创建了一个透视表。现在,我想在相同的工作表中创建第二个透视表,该表具有相同的数据源,但透视表中的打印数据不同(当然)。我一直收到一个错误,因为它说Pivot表不能覆盖另一个Pivot表。但是,如果我选择了创建透视表的区域,它们不会相互覆盖。我也手动测试过。另外,如果我记录这个过程,它只使用源数据的精确引用,我不想使用源数据,因为lastrow和lastcolumn每天都在变化。只是提醒一下,宏对于创建第一个表非常有用。第二张表是问题。下面,我将提供我现在的代码 Dim

我已经用源数据在同一张表中创建了一个透视表。现在,我想在相同的工作表中创建第二个透视表,该表具有相同的数据源,但透视表中的打印数据不同(当然)。我一直收到一个错误,因为它说Pivot表不能覆盖另一个Pivot表。但是,如果我选择了创建透视表的区域,它们不会相互覆盖。我也手动测试过。另外,如果我记录这个过程,它只使用源数据的精确引用,我不想使用源数据,因为lastrow和lastcolumn每天都在变化。只是提醒一下,宏对于创建第一个表非常有用。第二张表是问题。下面,我将提供我现在的代码

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

在填充第一个数据透视表之前插入第一个数据透视表并插入另一个数据透视表时,第一个数据透视表的空数据透视表范围将占用第二个数据透视表的目标单元格[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

在填充第一个数据透视表之前插入第一个数据透视表并插入另一个数据透视表时,第一个数据透视表的空数据透视表范围将占用第二个数据透视表的目标单元格[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
从:

重要信息”如果在Excel上定义多个数据透视表 工作表,结果表可能会增长和重叠 如果活动返回一个大的数据集,则相互之间。在这种情况下, 您将收到“一个数据透视表不能与另一个数据透视表重叠” “数据透视表”在刷新数据时。你可以纠正这个 在数据透视表之间添加列或行时出错 允许表在不重叠的情况下增长

从:

重要信息”如果在Excel上定义多个数据透视表 工作表,结果表可能会增长和重叠 如果活动返回一个大的数据集,则相互之间。在这种情况下, 您将收到“一个数据透视表不能与另一个数据透视表重叠” “数据透视表”在刷新数据时。你可以纠正这个 在数据透视表之间添加列或行时出错 允许表在不重叠的情况下增长


如果看不到数据,就很难判断数据透视表是否重叠或如何重叠。为什么要使用代码创建透视表?pivot表的想法是,只有数据会更改,因此pivot表定义保持不变,您只需要刷新它们。此外,考虑使用Excel表对象作为数据透视表的源,那么数据源将动态地增长和收缩。关于这个主题的书已经写好了,所以你可能想做一些关于数据透视表和动态数据源的研究和学习。@teylyn谢谢你的反馈!我想自动创建它们,因为这个宏每天都会在不同的工作簿中运行。我会把它粘贴到其他的表格上,不知道你的数据,很难判断数据表是否会重叠。为什么你使用代码来创建数据透视表?用数据透视表的想法是只有数据发生变化,所以数据透视表的定义保持不变,你只需要刷新它们。将对象作为数据透视表的源,那么数据源将动态地增长和收缩。关于这个主题已经有很多书了,所以您可能需要对数据透视表和动态数据源进行更多的研究和学习。@teylyn感谢您的反馈!我想自动创建它们,因为这个宏将在内部运行每天不同的工作簿。(我将每天复制粘贴到其他工作表上!@sktneer只是好奇为什么在
设置
对象后不使用
透视对象?而不是使用ActiveSheet.PivotTables(“PivotTable1”)
您可以将
与PTable1
一起使用,对于“PivotTable2”也一样@ShaiRado我没有更改OP的代码,只是删除了该行并将其放置在正确的位置,以避免OP出现错误。但我不应该重写代码。:@sktneer只是好奇为什么在
设置
对象后不使用
透视对象?而不是使用ActiveSheet.PivotTables(“PivotTable1”)
您可以将
用于PTable1
,“PivotTable2”也是如此@ShaiRado我没有更改OP的代码,只是删除了该行并将其放置在正确的位置,以避免OP出现错误。不过我不应该重写代码。:)