2

私はExcel2010を使用しており、VBA関数を記述して、ピボットテーブルのさまざまなメトリックをユーザーが変更したときに自動的にフォーマットします(フィールドを追加/削除するときにフォーマットが保持されるようにします)。これを行うために、Pivo​​tFieldsコレクションをループしています。形式を変更するには、ピボットテーブルにPivotFieldが表示されている必要があります。表示されていない場合、エラーがスローされます。そのため、Pivo​​tFieldのOrientationプロパティを確認し、OrientationofxlDataFieldに設定されているプロパティのみを処理できると考えました。

ただし、関数を実行すると、ピボットテーブルに表示されている場合でも、すべてのデータフィールドに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プロパティを使用しようとしましたが、アクセスしようとするとエラーが発生します。

4

1 に答える 1

2

ループする代わりに、方向性のあるものをPivotFieldsループする必要があります。DataFieldsxlDataField

beforeループがあるかどうかを確認する必要がある場合は、次のテストを行ってください。

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

データの向きに何もない場合は0を返します。

編集済み: もう1つ、イベントをオフにすることを忘れないでください。手順の結果、PTが変更され、そのイベントが再度発生します。だから、Application.EnableEvents = False最初と=True最後に。

于 2013-03-22T18:59:59.667 に答える