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

4
我有一个包含初始三个行标签字段的Excel 2010数据透视表。
我需要创建一个宏,将某个字段添加为数据透视表中最低的行标签字段。(由于某些原因,用户无法自己以正常方式添加此字段。)
然而,在用户运行此宏时,他们可能已经添加或删除了一些行标签。
当我在具有3个行标签的数据透视表中添加一个字段时(位于最低位置),宏录制器会给我这个结果:
With ActiveSheet.PivotTables("MyPivotTable").PivotFields("MyNewField")
    .Orientation = xlRowField
    .Position = 4
End With

如果用户添加或删除了一些项目,那么位置号4就是不正确的。我该如何将正确的位置号传递到我的代码中?
试图使用“Position = 99”来达到更高的目标会导致以下错误:
“无法设置PivotField类的Position属性”
有什么建议吗?
4个回答

5

PivotFields具有一个count属性。

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

此外,你可以使用其他选择项来代替PivotFields,以获得其他统计结果:

  • ColumnFields(列字段)
  • DataFields(数据字段)
  • HiddenFields(隐藏字段)
  • PageFields(页面字段)
  • RowFields(行字段)
  • VisibleFields(可见字段)

PivotFields.Count 给出的是总字段数,而不仅仅是显示的数量 :) - Siddharth Rout
@SiddharthRout,增加了其他可用计数的信息。 - SeanC
+1 建议另一种方法 :) - Siddharth Rout
是的,你说得对。我之前出现错误是因为其他原因。我已经回滚更改 :) - Siddharth Rout
我已经删除了我的回答,因为你的回答比我的更好 :) - Siddharth Rout
谢谢各位 - 所以直接回答我的问题,我需要使用 RowFields.Count。非常有用,非常感谢! - Andi Mohr

2

尝试完全删除.Position = 4字符串,即:

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

谢谢Peter。这也很有效,非常方便。但是,因为我还想知道当前使用了多少行标签,所以我选择了Sean的答案。 - Andi Mohr
@AndiMohr 没问题,你可以选择你最喜欢的那一个) 很高兴我的选项也在某种程度上有用) - Peter L.

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

谢谢,我一直在想是否必须走这条路线,但肖恩的答案是一个巧妙的解决方案。 - Andi Mohr

1
如果手头的任务是计算数据透视表中可能存在的行字段数量,您可以使用以下代码行来完成:
pt.RowRange.cells.count

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

在此处可以找到有关如何引用数据透视表范围的优秀描述。


谢谢Timbur。虽然不完全是我想要的,但感谢您提供有用的链接。那里有很多方便的提示。好老的Jon Peltier :) - Andi Mohr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接