VBA – 在同一工作表中的摆放数据透视表

新的VBA和我有我的macros在我的数据在同一工作表上创build数据透视表(例如,启动数据透视表在“I1”列)的困难。 我已经能够运行macros来select工作表内的所有数据,然后在另一个工作表上创build这些数据。 由于我将需要循环遍历同一工作簿上的多个工作表来创build多个数据透视表,因此使用单独的工作表是不可行的。

每个工作表具有相同数量的行数不等的列。 我的目标是让这个macros查看每个工作表并在其旁边输出一个数据透视表。

我觉得我下面的macros没有引用正确的数据透视表目的地。 任何援助将不胜感激。

Sub Macro4() ' 'Macro4 Macro ' ' FinalRow = Cells(Rows.Count, 1).End(xlUp).Row DataSheet = ActiveSheet.Name ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ DataSheet & "!R1C1:R" & FinalRow & "C8", Version:=xlPivotTableVersion15). _ CreatePivotTable TableDestination:=DataSheet & "!R1C9", TableName:= _ "PivotTable4", DefaultVersion:=xlPivotTableVersion15 Sheets(DataSheet).Select Cells(1, 9).Select With ActiveSheet.PivotTables("PivotTable4").PivotFields("Document Type") .Orientation = xlRowField.Position = 1 End With With ActiveSheet.PivotTables("PivotTable4").PivotFields("Accounting Event") .Orientation = xlRowField.Position = 2 End With With ActiveSheet.PivotTables("PivotTable4").PivotFields("Document Number") .Orientation = xlRowField.Position = 3 End With ActiveSheet.PivotTables("PivotTable4").AddDataField ActiveSheet.PivotTables ( _"PivotTable4").PivotFields("Amount"), "Sum of Amount", xlSum End Sub 

尝试下面的代码,它有一个不同的方法,定义RangePivotTablePivotCache ,并且可以根据您的需要轻松修改它们:

 Sub Macro4() Dim FinalRow As Long Dim DataSheet As String Dim PvtCache As PivotCache Dim PvtTbl As PivotTable Dim DataRng As Range Dim TableDest As Range FinalRow = Cells(Rows.Count, 1).End(xlUp).Row DataSheet = ActiveSheet.Name ' set data range for Pivot Table Set DataRng = Sheets(DataSheet).Range(Cells(1, 1), Cells(FinalRow, 8)) ' conversion of R1C1:R & FinalRow & C8 ' set range for Pivot table placement Set TableDest = Sheets(DataSheet).Cells(1, 9) ' conversion of R1C9 Set PvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, DataRng) ' this line in case the Pivot table doesn't exit >> first time running this Macro On Error Resume Next Set PvtTbl = ActiveWorkbook.Sheets(DataSheet).PivotTables("PivotTable4") ' check if "PivotTable4" Pivot Table already created (in past runs of this Macro) On Error GoTo 0 If PvtTbl Is Nothing Then ' "PivotTable4" doesn't exist >> create it ' create a new Pivot Table in "PivotTable4" sheet Set PvtTbl = ActiveWorkbook.Sheets(DataSheet).PivotTables.Add(PivotCache:=PvtCache, TableDestination:=TableDest, TableName:="PivotTable4") With PvtTbl.PivotFields("Document Type") .Orientation = xlRowField .Position = 1 End With With PvtTbl.PivotFields("Accounting Event") .Orientation = xlRowField .Position = 2 End With With PvtTbl.PivotFields("Document Number") .Orientation = xlRowField .Position = 3 End With PvtTbl.AddDataField ActiveSheet.PivotTables( _ "PivotTable4").PivotFields("Amount"), "Sum of Amount", xlSum Else ' just refresh the Pivot cache with the updated Range PvtTbl.ChangePivotCache PvtCache PvtTbl.RefreshTable End If End Sub