您將需要調整以適應您的需求,但以下內容將排列您的列表。它假定你的數據佈局爲在Sheet2中如下:
![Data layout](https://i.stack.imgur.com/vSljp.png)
而且它在Sheet7創建一個支點
![Pivot Layout](https://i.stack.imgur.com/qcw5w.png)
Option Explicit
Public Sub CreateOrderedFruitPivot()
Dim pc As PivotCache, pt As PivotTable, pi As PivotItem
Dim varSubsOff, varItemList, varItem
varSubsOff = Array(False, False, False, False, False, False, False, False, False, False, False, False)
With ActiveSheet 'better to used named Sheet
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"'Sheet2'!R1C1:R4C2", Version:=6).CreatePivotTable TableDestination:="Sheet7!R3C1", _
TableName:="PivotTable2", DefaultVersion:=6
Set pt = ThisWorkbook.Worksheets("Sheet7").PivotTables("PivotTable2")
With pt
.AddDataField .PivotFields("fruits"), "Count of fruits", xlCount
With .PivotFields("fruits")
.Orientation = xlRowField
.Position = 1
End With
ActiveWorkbook.ShowPivotTableFieldList = False
On Error Resume Next
With .PivotFields("fruits")
.PivotItems("(blank)").Visible = False
varItemList = Array("Apples", "Oranges", "Grapes")
For Each varItem In varItemList
Set pi = .PivotItems(varItem)
pi.Visible = True
pi.Position = .VisibleItems.Count
Set pi = Nothing
Next varItem
On Error GoTo 0
End With
pt.RowAxisLayout xlTabularRow
End With
End With
End Sub
您將需要修改你的表和範圍因此(也檢查字段名稱),但您真正感興趣的部分如下:
On Error Resume Next
With .PivotFields("fruits")
.PivotItems("(blank)").Visible = False
varItemList = Array("Apples", "Oranges", "Grapes")
For Each varItem In varItemList
Set pi = .PivotItems(varItem)
pi.Visible = True
pi.Position = .VisibleItems.Count
Set pi = Nothing
Next varItem
On Error GoTo 0
End With
在這裏,您按照想要查看項目的順序循環訪問數組並添加它們,並且錯誤處理處理的項目不存在。
學分轉到羅裏這裏:Sorting pivot items因爲我用他的解決方案作爲接近你的問題的框架。
你能發佈更多的代碼嗎? – QHarr
抱歉,「PivotField」在行中,而不是列。 – kulapo