2013-03-22 43 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