如果至少有一個項目已經丟失(和晚一點的任何項目都存在),那麼你的代碼會搞亂...的順序
儘管此代碼它不是這樣,我會做到這一點,它應該是自解釋)
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? ????」與最低的季度最早今年第一個和最後一年的最高季度最後一個/ - > Q1 2013 ... 2013年第四季度,2014年第一季度... Q4 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