我正在考虑这一段时间,以便在这里使用正确的循环。
我正在尝试在枢轴底部移动/分类那些水果,但是它们应该在底部确切的特定顺序( fruit1,fruit2,...,苹果,橙子,葡萄)。
但是,有可能在数据中可能不会出现底部3个水果中的一个,因此我无法从PivotItems.Count
中减去其位置。
With pvt
.PivotField("fruits").Orientation = xlRowField
.RowAxisLayout xlTabularRow
For Each pi In .PivotFields("fruits").PivotItems
Select Case LCase(pi.Name)
Case "apples", "oranges", "grapes"
.PivotFields("fruits").PivotItems(pi.Name).Position = .PivotFields("fruits").PivotItems.Count
End Select
Next pi
End with
答案 0 :(得分:1)
您需要根据自己的需要进行调整,但以下内容将为您的清单订购。它假设您在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
在这里,您按照要查看项目的顺序循环数组并添加它们,并且错误处理处理项目不存在。
致信Rory:Sorting pivot items因为我使用他的解决方案作为解决问题的框架。