按照固定顺序排列枢轴行标签

我希望我的macros按照一定的顺序(按季度/年 – 请参阅下面的代码)排列我的数据透视表的行标签。 一些数据,macros将被运行将不会包括任何所有行标签按照下面的代码 – 这就是为什么我插入“错误转到0”。

不幸的是,只有一些数据/宿舍使用下面的代码以正确的顺序排列。

任何人都可以帮助显示我做错了什么?

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Issue Quarter") On Error Resume Next .PivotItems("Q1 2014").Position = 1 .PivotItems("Q2 2014").Position = 2 .PivotItems("Q3 2014").Position = 3 .PivotItems("Q1 2015").Position = 4 .PivotItems("Q2 2015").Position = 5 .PivotItems("Q3 2015").Position = 6 .PivotItems("Q4 2015").Position = 7 .PivotItems("Q1 2016").Position = 8 .PivotItems("Q2 2016").Position = 9 .PivotItems("Q3 2016").Position = 10 .PivotItems("Q4 2016").Position = 11 On Error GoTo 0 End With 

如果至less有一个项目丢失(以及后来出现的任何项目),那么您的代码的顺序就会搞乱了。

虽然这个代码不是我想做的方式,但应该是自我解释;)

 With ActiveSheet.PivotTables("PivotTable1").PivotFields("Issue Quarter") Dim i As Byte i = 1 On Error Resume Next .PivotItems("Q1 2014").Position = i If Err.Number Then Err.Clear Else i = i + 1 .PivotItems("Q2 2014").Position = i If Err.Number Then Err.Clear Else i = i + 1 .PivotItems("Q3 2014").Position = i If Err.Number Then Err.Clear Else i = i + 1 .PivotItems("Q1 2015").Position = i If Err.Number Then Err.Clear Else i = i + 1 .PivotItems("Q2 2015").Position = i If Err.Number Then Err.Clear Else i = i + 1 .PivotItems("Q3 2015").Position = i If Err.Number Then Err.Clear Else i = i + 1 .PivotItems("Q4 2015").Position = i If Err.Number Then Err.Clear Else i = i + 1 .PivotItems("Q1 2016").Position = i If Err.Number Then Err.Clear Else i = i + 1 .PivotItems("Q2 2016").Position = i If Err.Number Then Err.Clear Else i = i + 1 .PivotItems("Q3 2016").Position = i If Err.Number Then Err.Clear Else i = i + 1 .PivotItems("Q4 2016").Position = i On Error GoTo 0 End With 

一个不太明显的方法(这个更短,但也是一样):

 With ActiveSheet.PivotTables("PivotTable1").PivotFields("Issue Quarter") Dim i As Byte, x As Variant: i = 1 On Error Resume Next For Each x In Array("Q1 2014","Q2 2014","Q3 2014","Q1 2015","Q2 2015","Q3 2015","Q4 2015","Q1 2016","Q2 2016","Q3 2016","Q4 2016") .PivotItems(x).Position = i If Err.Number Then Err.Clear Else i = i + 1 Next On Error GoTo 0 End With 

编辑

只是为了显示一个没有错误的方法;)(它会把所有看起来像“Q?????”的数据项sorting在最早一年的第一季度和去年最后一季度的最低季度/ – > Q1 2013 … 2013年第四季度,2014年第一季度… 2016年第四季度)

 Dim x, y() As Double, i As Long With ActiveSheet.PivotTables("PivotTable1").PivotFields("Issue Quarter") ReDim y(1 To .PivotItems.Count) For Each x In .PivotItems If x Like "Q? ????" Then i = i + 1 y(i) = Right(x, 4) & "." & Mid(x, 2, 1) End If Next If i = 0 Then Exit Sub ReDim Preserve y(1 To i) For i = 1 To UBound(y) x = Application.Small(y, i) x = "Q" & Right(x * 10, 1) & " " & Int(x) .PivotItems(x).Position = i Next End With 

您也可以简单地反转订单,并将每件商品放在第一个位置:

 With ActiveSheet.PivotTables("PivotTable1").PivotFields("Issue Quarter") On Error Resume Next .PivotItems("Q4 2016").Position = 1 .PivotItems("Q3 2016").Position = 1 .PivotItems("Q2 2016").Position = 1 .PivotItems("Q1 2016").Position = 1 .PivotItems("Q4 2015").Position = 1 .PivotItems("Q3 2015").Position = 1 .PivotItems("Q2 2015").Position = 1 .PivotItems("Q1 2015").Position = 1 .PivotItems("Q4 2014").Position = 1 .PivotItems("Q3 2014").Position = 1 .PivotItems("Q2 2014").Position = 1 .PivotItems("Q1 2014").Position = 1 On Error GoTo 0 End With 

顺便说一句,你似乎已经错过了2014年第四季度。