您将需要调整以适应您的需求,但以下内容将排列您的列表。它假定你的数据布局为在Sheet2中如下:
而且它在Sheet7创建一个支点
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