【问题标题】:VBA Pivot Table On New Sheet新工作表上的 VBA 数据透视表
【发布时间】:2013-12-23 05:37:32
【问题描述】:

我已经录制了一个宏来在 VBA 中创建数据透视表和后续图表。它就像一个魅力,根本不是我需要的。问题是我希望能够运行代码并让它在不存在的工作表上创建一个表。基本上,我将从菜单上的按钮运行它,它应该在新页面上创建表格和图表。事不宜迟:

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

如果我把它用简单的英语表达,我会假设它的意思是……在主预算表中选择数据,然后在表 21 上创建一个名为数据透视表 12 的数据透视表……然后选择表 21 并选择字段对于数据透视表...最后,从该数据添加图表...

我认为我需要做的只是找出这些事物的通用名称(源数据除外)。

另外,目前它只会运行一次,并且只有当该工作表已经存在时才会运行,大概是因为它不能创建一个名为相同事物的数据透视表,所以如果它可以重复地在不同的工作表上创建同一个表,我可能会死开心。

如您所见,我已经尝试了足够多的方法,我已经创建了 21 张纸:/ 所以努力就在那里,但正如爱因斯坦对精神错乱的定义所说,“精神错乱是在尝试同样的事情并期待不同的结果。”目前,我没有什么新东西可以尝试了。

【问题讨论】:

  • 我确实尝试过,虽然它确实创建了一个新工作表,但表格并没有出现在其中。

标签: excel charts pivot-table vba


【解决方案1】:

添加一个新工作表,然后使用该工作表添加新的枢轴,如下所示:

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

【讨论】:

  • 哦,天哪,我已经花了 4 个小时试图弄清楚这件事,而你就这样解决了。太感谢了。你太棒了。最后一件事,抱歉,名称“数据透视表名称”是一种通用形式,可以让您不需要特定名称,或者您可以在其中添加任何内容吗?
  • @NicholasBrandon 您可以使用任何您想要的数据透视表名称
【解决方案2】:
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

【讨论】:

  • 它运行成功.. 享受伙计们:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多