新的工作表上的VBA枢轴表

我已经logging了一个macros,在VBA中创build一个数据透视表和随后的图表。 它像一个魅力,只是根本不需要它。 问题是我希望能够运行代码,并让它在尚不存在的工作表上创build表格。 基本上我会从菜单上的一个button来运行它,它应该在一个新的页面上创build表和图表。 没有进一步的介绍:

Sub Macro13() ' Macro13 Macro ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Main Budget Sheet!R2C1:R88C10", Version:=xlPivotTableVersion14). _ CreatePivotTable TableDestination:="Sheet21!R1C1", TableName:= _ "PivotTable12", DefaultVersion:=xlPivotTableVersion14 Sheets("Sheet21").Select Cells(1, 1).Select With ActiveSheet.PivotTables("PivotTable12").PivotFields("Category") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("PivotTable12").AddDataField ActiveSheet.PivotTables( _ "PivotTable12").PivotFields("Labor"), "Sum of Labor", xlSum ActiveSheet.PivotTables("PivotTable12").AddDataField ActiveSheet.PivotTables( _ "PivotTable12").PivotFields("Material"), "Sum of Material", xlSum ActiveSheet.Shapes.AddChart.Select End Sub 

如果我把这个简单的英文,我会假设它意味着…select主要预算表中的数据,然后在工作表21中创build一个数据透视表,名为枢轴表12 …然后select工作表21,并select枢轴的字段表…最后,从该数据添加图表…

我想我需要做的只是找出每个这些东西的通用名称(除了源数据)。

另外,目前只能运行一次,只有在该表已经存在的情况下,大概是因为它不能将一个数据透视表命名为同一个东西,所以如果它可以反复在不同的表上创build相同的表,我可能会快乐。

正如你所看到的,我已经做了足够的尝试,创造了21页:所以努力就在那里,但正如爱因斯坦对疯狂的定义所指出的,“疯狂正在尝试同样的事情,期待着不同的结果”。 目前,我正在耗尽新的尝试。

添加一个新工作表,然后使用该工作表添加新的数据透视表,如下所示:

 Sub AddPivotOnNewSheet() Dim wsNew As Worksheet Set wsNew = Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Main Budget Sheet!R2C1:R88C10", Version:=xlPivotTableVersion14). _ CreatePivotTable TableDestination:=wsNew.Name & "!R1C1", TableName:= _ "PivotTableName", DefaultVersion:=xlPivotTableVersion14 With ActiveSheet.PivotTables("PivotTableName").PivotFields("Category") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("PivotTableName").AddDataField ActiveSheet.PivotTables( _ "PivotTableName").PivotFields("Labor"), "Sum of Labor", xlSum ActiveSheet.PivotTables("PivotTableName").AddDataField ActiveSheet.PivotTables( _ "PivotTableName").PivotFields("Material"), "Sum of Material", xlSum wsNew.Shapes.AddChart.Select End Sub 
 Sub pivotnewsheet() Dim ws As Worksheet Dim pc As PivotCache Dim pt As PivotTable 'Creating Pivot cache On Error Resume Next Set pc = ActiveWorkbook.PivotCaches.Create(xlDatabase, Cells(5, 1).CurrentRegion) 'select first cells of your data range, in my case its start with Row5 column1 so i put cells(5,1) 'Adding new worksheet Set ws = Worksheets.Add ws.Name = "Summary" 'Creating Pivot table Set pt = ActiveSheet.PivotTables.Add(PivotCache:=pc, Tabledestination:=Range("A3")) ' it will create pivot table on sheet named summary at range A3 pt.Name = "PivotTable" 'Setting Fields With pt with .PivotFields("DEPT_NAME") .Orientation = xlRowField .Position = 1 End With 'set column field With .PivotFields("QTY") .Orientation = xlDataField .Function = xlSum .Position = 1 End With With .PivotFields("TOTAL_RETAIL_VALUE") .Orientation = xlDataField .Function = xlAverage .Position = 2 .NumberFormat = "0.00" 'format for two decimals End With With .PivotFields("TOTAL_LANDED_COST") .Orientation = xlDataField .Function = xlAverage .NumberFormat = "0.00" .Position = 3 End With 'select classic view pivot With ActiveSheet.PivotTables("PivotTable") .InGridDropZones = True .RowAxisLayout xlTabularRow End With End With End Sub