Excel VBA – 如何确定数据透视表中的行标签字段的数量?

我有一个Excel 2010数据透视表,最初包含3个行标签字段。

我需要创build一个macros来添加一个特定的字段作为数据透视表中的最低行标签字段。 (由于我不会进入的原因,用户不能以正常的方式自己添加这个字段。)

但是,当用户运行这个macros时,他们可能已经添加或删除了一些行标签。

macroslogging器给我这个时,我添加一个数据透视表的最低位置(有3个行标签已被选中)字段:

With ActiveSheet.PivotTables("MyPivotTable").PivotFields("MyNewField") .Orientation = xlRowField .Position = 4 End With 

如果用户添加或删除了一些项目,这个位置编号4是不正确的。 我将如何传入我的代码正确的位置号码?

试图使用Position = 99高目标给我以下错误:

无法设置PivotField类的位置属性

有什么想法吗?

PivotFields有一个count属性。

 With ActiveSheet.PivotTables("MyPivotTable").PivotFields("MyNewField") .Orientation = xlRowField .Position = ActiveSheet.PivotTables("MyPivotTable").PivotFields.Count + 1 End With 

此外,而不是数据PivotFields ,您可以replace其他select给你其他计数:

  • ColumnFields
  • 数据域
  • HiddenFields
  • PageFields
  • RowFields
  • VisibleFields

尝试扔掉.Position = 4string完全,即:

 With ActiveSheet.PivotTables("MyPivotTable").PivotFields("MyNewField") .Orientation = xlRowField End With 

powershell解决scheme:

 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 

如果手头的任务是计算数据透视表中可能存在的行数的数量,则应该使用下面这行代码:

 pt.RowRange.cells.count 

这将给出pivotrows的数量。 但是,这将计算标题行以及总行(如果合计应用于数据透视表)。因此,您将需要根据您的情况减去1或2。

关于如何引用可转换范围的详细描述可以在这里find。