【问题标题】:Pivot Table PivotFields.Position returns Error 2042数据透视表 PivotFields.Position 返回错误 2042
【发布时间】:2016-09-24 16:47:53
【问题描述】:

我正在使用 VBA 来捕获放入数据透视表中的所有区域。代码如下

For Each objCubeFld In pvt.PivotFields 'Loop through all fields in PivotTable
Cubefield(i) = objCubeFld
Orient(i) = objCubeFld.Orientation 'Orientation
Pos(i) = objCubeFld.Position 'Position
i = i + 1
Next objCubeFld

但是,我得到了以下错误。

我知道 Orientation="3" 时,表示过滤。删除过滤器后,程序运行正常。谁能解释一下?

【问题讨论】:

  • 过滤器是否在日期字段上?
  • @skkakkar 不。任何字段都会失败,不仅仅是日期。我刚刚测试过。
  • 我最近开始学习数据透视表,正如我从网上收集到的那样。 Field.CurrentPage 仅适用于过滤器字段(也称为页面字段)。如果要过滤行/列字段,则必须循环浏览各个项目,如下所示: ~ With Field If .Orientation = xlPageField Then .CurrentPage = Value ElseIf .Orientation = xlRowField Or .Orientation = xlColumnField Then SO Question Reference~
  • @skkakkar 感谢您的回答。我想你是在引用This SO
  • 请分享我的学习或解决方案提示的链接。谢谢

标签: vba excel


【解决方案1】:

当涉及到过滤器或页面字段时,这不是 .Position。只是不要使用 .Position。

  For Each objCubeFld In pvt.PivotFields 'Loop through all fields in PivotTable
    Cubefield(i) = objCubeFld
    Orient(i) = objCubeFld.Orientation 'Orientation
    If objCubeFld.Orientation = "3" Then 'When it is filter
    Pos(i) = 1
    Else
    Pos(i) = objCubeFld.Position 'Position
    End If
    i = i + 1
    Next objCubeFld

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多