2

我正在使用 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

我什至使用以下方法检查了所有 PivotFields:

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

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

4

1 回答 1

2

而不是循环通过PivotFields你应该循环通过DataFields哪些是xlDataField定向的。

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

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

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

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

于 2013-03-22T18:59:59.667 回答