首页 文章

Excel PivotField方向错误?

提问于
浏览
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

我甚至使用以下方法检查所有PivotField:

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

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

1 回答

  • 2

    而不是循环遍历 PivotFields ,你应该循环 xlDataField ,这是 xlDataField 方向的那些 .

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

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

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

    EDITED: 还有一件事 - 不要忘记关闭事件,因为您的程序会导致PT更改再次触发该事件 . 所以, Application.EnableEvents = False 在开头和 =True 到底 .

相关问题