我有一个Excel 2010数据透视表,最初包含3个行标签字段。
我需要创建一个宏,将某个字段添加为数据透视表中的最低行标签字段。 (由于我不会进入的原因,用户无法以正常方式自行添加此字段。)
但是,当用户运行此宏时,他们可能已添加或删除了某些行标签。
当我在数据透视表的最低位置添加一个字段(已经选择了3个行标签)时,宏录制器会给我这个:
With ActiveSheet.PivotTables("MyPivotTable").PivotFields("MyNewField")
.Orientation = xlRowField
.Position = 4
End With
如果用户添加或删除了某些项目,则此位置编号4不正确。如何将正确的位置编号传递给我的代码?
尝试使用Position = 99
瞄准目标时出现以下错误:
无法设置PivotField类的Position属性
有什么想法吗?
答案 0 :(得分:5)
PivotFields
有一个计数属性。
With ActiveSheet.PivotTables("MyPivotTable").PivotFields("MyNewField")
.Orientation = xlRowField
.Position = ActiveSheet.PivotTables("MyPivotTable").PivotFields.Count + 1
End With
此外,您可以替换其他选项代替PivotFields
,以便为您提供其他计数:
答案 1 :(得分:2)
尝试完全丢弃.Position = 4
字符串,即:
With ActiveSheet.PivotTables("MyPivotTable").PivotFields("MyNewField")
.Orientation = xlRowField
End With
答案 2 :(得分:1)
蛮力解决方案:
Public Function GetPivotFieldPos(pt As PivotTable, fieldName As String)
Dim cnt As Integer
Dim pos As Integer
Dim pf As PivotField
On Error GoTo ErrHandler
cnt = 0 ' might be 1-based!?
pos = -1
For Each pf In pt.PivotFields
cnt = cnt + 1
If pf.Name = fieldName Then
pos = cnt
Exit For
End If
Next
GetPivotFieldPos = pos
Exit Function
ErrHandler:
GetPivotFieldPos = -1
On Error GoTo 0
End Function
答案 3 :(得分:1)
如果手头的任务是计算pivottable中可能存在的行域数,你应该享受这行代码:
pt.RowRange.cells.count
这将给出枢轴的计数。但是,这将计算标题行以及总行数(如果总计应用于数据透视表。)因此,您需要根据您的情况减去1或2。
An excelent description of how to refer to pivottable ranges can be found here.