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 = 4
string完全,即:
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。