如何调试数据透视图宏?

时间:2016-08-12 13:27:21

标签: excel vba excel-vba macros pivot-chart

我无法运行此功能,我想计算工作表中的总行数并将其传递给数据透视表以进行创建。

  1. 数据透视表创建
  2. 选择文件
  3. 双击总计以创建新的电子表格
  4. Sub Macro2()
    
    Dim ws As Worksheet
    Dim lastRow As Long
    Set ws = ActiveSheet
    NewSheet = ActiveSheet.Name
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        ws & "!R1C1:R" & lastRow & "C15",    
    Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:=NewSheet & "!R1C1", TableName:="PivotTable1",   
    DefaultVersion _
        :=xlPivotTableVersion14
    
    Sheets("NewSheet").Select
    Cells(1, 1).Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Range("Sheet4!$A$1:$C$18")
    ActiveSheet.Shapes("Chart 1").IncrementLeft 192
    ActiveSheet.Shapes("Chart 1").IncrementTop 15
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Customer")
    .Orientation = xlRowField
    .Position = 1
    End With
    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(  
    _
     "PivotTable1").PivotFields("Customer"), "Count of Customer", xlCount
    ActiveWindow.SmallScroll Down:=12
    Range("B29").Select
    Selection.ShowDetail = True
    End Sub'
    

1 个答案:

答案 0 :(得分:1)

下面的代码检查 Sheet1 中的数据(修改为您的工作表名称)并在工作表中创建数据透视表和图表 报告

第一次创建数据透视表和图表时,它第二次只使用更新的数据行刷新数据透视表(在 Sheet1 中)并更新图表。

Sub Macro2()

Dim sht1                            As Worksheet
Dim shtReport                       As Worksheet
Dim lastRow                         As Long
Dim PivotSrc_Range                  As Range

Dim PvtCache                        As PivotCache
Dim PvtTbl                          As PivotTable
Dim Chart1                          As Chart

' modify to your sheet name
Set sht1 = ThisWorkbook.Sheets("Sheet1")

' modify to your desired Pivot Table location
Set shtReport = ThisWorkbook.Sheets("Report")

' create the Source Range of the Pivot Cache
lastRow = sht1.Cells(sht1.Rows.Count, "A").End(xlUp).Row

' it's looking uo tp Column "O" (15) as recorded in your MACRO
Set PivotSrc_Range = sht1.Range(sht1.Cells(1, 1), sht1.Cells(lastRow, 15))

' set the Pivot Cache
Set PvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PivotSrc_Range, Version:=xlPivotTableVersion14)

On Error Resume Next
Set PvtTbl = shtReport.PivotTables("PivotTable1")

On Error GoTo 0
If PvtTbl Is Nothing Then
    ' create a new Pivot Table in "Report" sheet, start from Cell A2
    Set PvtTbl = shtReport.PivotTables.Add(PivotCache:=PvtCache, TableDestination:=shtReport.Range("A2"), TableName:="PivotTable1")

    ' modify the name in brackets according to your Pivot Fields
    With PvtTbl.PivotFields("Customer")
        .Orientation = xlRowField
        .Position = 1
    End With        

    PvtTbl.AddDataField PvtTbl.PivotFields("Customer"), "Count of Customer", xlCount

Else
    ' just refresh the Pivot cache with the updated Range (data in Sheet1)
    PvtTbl.ChangePivotCache PvtCache
    PvtTbl.RefreshTable
End If

' check if already has a chart in sheet (from previous Macro Runs)
If shtReport.ChartObjects.Count >= 1 Then
    Set Chart1 = shtReport.ChartObjects(1).Chart
Else ' first time >> create the chart
    shtReport.Shapes.AddChart.Select
    Set Chart1 = ActiveChart
End If

With Chart1
    .ChartType = xlColumnClustered
    .SetSourceData Source:=PvtTbl.TableRange1 ' refresh the chart with the updated Pivot Table
End With


End Sub