添加新行后,vba轴不会刷新

添加新行后,vba轴不会刷新,vba,excel,Vba,Excel,在VBA的帮助下,我能够创建透视表。但当在工作表中添加新行,并且我使用wksSource1.PivotTables1.RefreshtTable刷新数据透视表时,它不会更新数据透视表 Dim PCache As PivotCache Dim PTable As PivotTable Dim PRange As Range Dim lastrowv As Long Dim lastcolv As Long lastrowv = wksSource.Cells(Rows.Count, 3).End

在VBA的帮助下,我能够创建透视表。但当在工作表中添加新行,并且我使用wksSource1.PivotTables1.RefreshtTable刷新数据透视表时,它不会更新数据透视表

Dim PCache As PivotCache
Dim PTable As PivotTable
Dim PRange As Range
Dim lastrowv As Long
Dim lastcolv As Long

lastrowv = wksSource.Cells(Rows.Count, 3).End(xlUp).Row
lastcolv = wksSource.Cells(5, Columns.Count).End(xlToLeft).Column
Set PRange = wksSource.Cells(5, 1).Resize(lastrowv - 4, lastcolv)

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        PRange, Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:=wksSource1.Cells(1, 1), TableName:="PivotTable14", _
        DefaultVersion:=xlPivotTableVersion14
    wksSource1.Select
    Cells(1, 1).Select
    With ActiveSheet.PivotTables("PivotTable14").PivotFields("Term - Phases")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable14").PivotFields("Status")
        .Orientation = xlColumnField
        .Position = 1
    End With

    ActiveSheet.PivotTables("PivotTable14").AddDataField ActiveSheet.PivotTables( _
        "PivotTable14").PivotFields("Steps/ Activities"), "Count of Steps/ Activities" _
        , xlCount

wksSource1.Pivottable1.RefreshtTable仅在pivot缓存源数据为动态数据(即,源数据为excel表数据或动态命名范围)时才起作用

但是,当您创建透视表时,源数据范围是固定的,并且取决于范围PRange

因此,当您在源数据表上添加新数据时,pivot缓存仍然引用未以某种方式重置的PRange

如果要在子例程中刷新数据透视表,则需要更新现有数据透视缓存,而不是刷新数据透视表。数据透视缓存更新后,数据透视表也将更新

尝试下面的代码,并根据需要进行调整

Sub RefreshPivotTable()
Dim wksSource As Worksheet, wksSource1 As Worksheet
Dim PRange As Range
Dim lastrowv As Long, lastcolv As Long

Set wksSource = Sheets("Sheet4")          'Sheet which contains the source data for pivot table

Set wksSource1 = Sheets("Sheet3")   'Sheet which contains Pivot table

lastrowv = wksSource.Cells(Rows.Count, 3).End(xlUp).Row
lastcolv = wksSource.Cells(5, Columns.Count).End(xlToLeft).Column
Set PRange = wksSource.Range("C5:F12")

wksSource1.PivotTables(1).ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange)

End Sub