2017-10-18 232 views
0

我已經在源數據的同一張表中創建了一張數據透視表。現在,我想在同一張表中使用相同的數據源創建第二個數據透視表,但在透視表內(當然)使用不同的打印數據。我一直收到一個錯誤,因爲它表示數據透視表不能覆蓋另一個數據透視表。但是,他們的方式我選擇了數據透視表創建的範圍,它們不會互相覆蓋。我也手動測試過。另外,如果我記錄過程,它只是使用源數據的準確參考,我不想使用該參數,因爲每天都會更改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感謝您的反饋!我想自動創建它們,因爲這個宏將每天在不同的工作簿中運行。 (我會複製粘貼它每天到其他工作表! –

回答

1

當插入第一樞軸表和填充的第一個之前插入另一個,所述第一樞轉表的空的透視表範圍佔據目的地小區[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」也是一樣的 –

0

MSDN doc on pivot tables

重要」 如果你在Excel中 工作表中定義多個數據透視表,可能生成的表可以增長和重疊 彼此如果Activity返回一個大數據集。在這種情況下,當您刷新數據時,您將收到「數據透視表報表不能重疊另一個 數據透視表」。您可以通過將數據透視表之間的添加列或行添加到 來更正此錯誤,從而允許這些表的增長不會重疊。

相關問題