2013-03-22 76 views
2

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

但是,当我运行该函数时,所有数据字段都显示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属性,但遇到尝试访问它的错误。

回答

2

而不是循环通过PivotFields你应该循环通过DataFields这是在xlDataField方向。

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

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

返回0,如果没有什么数据方向。

编辑: 还有一件事 - 不要忘记关闭事件作为你的程序结果PT更改,再次触发该事件。所以,Application.EnableEvents = False开头,=True结束。

+0

这固定它,非常感谢。我没有意识到数据字段有单独的集合。 – BTGunner 2013-03-22 19:13:59