更改数据透视表数据源并按数据源顺序排序

时间:2018-06-18 19:02:40

标签: excel vba excel-vba sorting pivot-table

我有很多不同的工作表有一个或多个数据透视表,它们的源始终是一个工作表。

例如,数据透视表的来源是“sheet_data1!$ A $ 1:$ I $ 1149”。工作表“sheet_data1”有1149行。我有一个程序改变了这个工作表,它可以增加或减少该表中的行数。

因此,如果之前有更多行,则枢轴不会计算某些行,或者当行数少于之前时,会考虑空行。

这是更改来源的代码:

Private Sub Workbook_Open()
    For Each St In ActiveWorkbook.Worksheets
        For Each pt In St.PivotTables
                Dim StartPoint As Range
                Dim NewRange As String
                Dim LastCol As Long
                Dim lastRow As Long
                Dim Data_Sheet As Worksheet
                Dim DataRange As Range

                Set Data_Sheet = ThisWorkbook.Worksheets(Split(pt.PivotCache.SourceData, "!")(0))
                Set StartPoint = Data_Sheet.Range("A1")
                LastCol = StartPoint.End(xlToRight).Column
                DownCell = StartPoint.End(xlDown).Row

                Set DataRange = Data_Sheet.Range(StartPoint, Data_Sheet.Cells(DownCell, LastCol))
                NewRange = Data_Sheet.Name & "!" & DataRange.Address(ReferenceStyle:=xlR1C1)

                pt.ChangePivotCache ActiveWorkbook. _
                PivotCaches.Create(SourceType:=xlDatabase, SourceData:=NewRange)
        Next
    Next
End Sub

现在的问题是我需要项目与数据源的顺序相同但是当我使用上面的代码更改数据源时,它会保留旧表的顺序,同时将新值放在最后

例如,我有一个名为month的字段(它是一个字符串,如果更改为其他类型,它会使其他事情变得更复杂)。在之前的数据源中,它与数据源的顺序相同:

May/2017
Jun/2017
Jul/2017
Aug/2017
Sep/2017
Oct/2017
Nov/2017
Dec/2017
Jan/2018
Feb/2018
Mar/2018
Apr/2018
May/2018

现在数据源又增加了4个月,但数据透视表与数据源的顺序不同。

更改和刷新数据源后进行透视:

May/2017
Jun/2017
Jul/2017
Aug/2017
Sep/2017
Oct/2017
Nov/2017
Dec/2017
Jan/2018
Feb/2018
Mar/2018
Apr/2018
May/2018
Apr/2017
Mar/2017
Feb/2017
Jan/2017

新数据源订单

Jan/2017
Feb/2017
Mar/2017
Apr/2017
May/2017
Jun/2017
Jul/2017
Aug/2017
Sep/2017
Oct/2017
Nov/2017
Dec/2017
Jan/2018
Feb/2018
Mar/2018
Apr/2018
May/2018

我听说这是枢轴缓存的问题,但没有找到解决方法。谁知道如何解决这个问题?

0 个答案:

没有答案