【问题标题】:Excel PivotField Orientation is wrong?Excel PivotField 方向错误?
【发布时间】:2013-03-12 16:53:45
【问题描述】:

我正在使用 Excel 2010 并编写一个 VBA 函数来自动格式化数据透视表中的各种指标,因为它被用户更改(以便在他们添加/删除字段时保留格式)。我正在循环通过 PivotFields 集合来执行此操作。为了更改格式,数据透视表需要在数据透视表中可见,否则会引发错误。所以我想我可以只检查 PivotField 的 Orientation 属性,并且只处理那些设置为 xlDataField 的 Orientation。

但是,当我运行该函数时,所有数据字段都显示 xlHidden 的方向,即使它们在数据透视表中可见。

我只是在做这样一个简单的功能

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

    Dim pt As PivotField

    For Each pt In ActiveSheet.PivotTables("PivotTable1").PivotFields

        If VBA.InStr(1, pt.Caption, "COMP", vbTextCompare) And pt.Orientation = xlDataField Then
            pt.Function = xlAverage
            pt.NumberFormat = "0.00%"
        End If

    Next pt

End Sub

我什至使用以下方法检查了所有数据透视字段:

Debug.Print pt.Caption & " " & pt.Orientation

任何不在页面、行或列字段中的内容都显示为隐藏。没有任何内容显示为数据字段。我错过了什么吗?我设置为数据字段的内容无关紧要,没有任何内容被标记为 xlDataField。我应该尝试另一种方式吗?我尝试使用 PivotFields.Hidden 属性,但尝试访问它时出错。

【问题讨论】:

    标签: vba excel excel-2010 pivot-table


    【解决方案1】:

    而不是循环通过PivotFields,您应该循环通过DataFields,它们在xlDataField 方向。

    如果您需要检查是否有任何前循环,只需测试:

    If ActiveSheet.PivotTables(1).DataFields.Count > 0 Then 
    

    如果数据方向没有任何内容,则返回 0。

    已编辑: 还有一件事-不要忘记关闭事件,因为您的程序会导致 PT 更改再次触发该事件。所以,Application.EnableEvents = False 开头,=True 结尾。

    【讨论】:

    • 这解决了它,非常感谢。我没有意识到数据字段有一个单独的集合。
    猜你喜欢
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多