如何调试数据透视图宏?

How to debug a Pivot Chart Macro?

我无法 运行 这个,我想计算 sheet 中的总行数并将其传递给要创建的数据透视表。

  1. 创建数据透视图
  2. select 场
  3. 双击总计创建新的点差sheet
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:$C")
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'

下面的代码检查 Sheet1 中的数据(修改为您的 sheet 名称)和在 Sheet Report.

中创建数据透视表 Table 和图表

第一次创建数据透视表 Table 和图表,从第二次开始它只使用更新的数据行刷新数据透视表缓存(在 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