2016-05-26 18 views
0

私はピボットテーブルに置かれたすべての領域を取得するためにVBAを使用しています。コードは次のとおりですピボットテーブルPivotFields.Positionがエラー2042を返します

For Each objCubeFld In pvt.PivotFields 'Loop through all fields in PivotTable 
Cubefield(i) = objCubeFld 
Orient(i) = objCubeFld.Orientation 'Orientation 
Pos(i) = objCubeFld.Position 'Position 
i = i + 1 
Next objCubeFld 

ただし、私は以下のエラーが発生しました。

enter image description here

私はオリエンテーション= "3"、それはフィルタを意味するとき知っています。フィルタを削除した後、プログラムはうまく動作します。誰でもこれを説明できますか?

+0

フィルタは日付フィールドにありますか? – skkakkar

+0

@skkakkarいいえ、Dateだけでなく、いずれのフィールドも失敗します。私はちょうどテストした。 – NewGuyComesIn

+0

私は非常に最近ピボットテーブルを学び始めました。私はウェブから集まってきました。 Field.CurrentPageは、フィルターフィールド(ページフィールドとも呼ばれます)に対してのみ機能します。 あなたは、行/列フィールドをフィルタリングする場合は、あなたがそうのような個々の項目、を循環する必要があります:フィールド で 〜 .Orientation = xlPageField場合、 .CurrentPage =値 のElseIf .Orientation = xlRowFieldか。オリエンテーション= xlColumnField [その後、質問の参照〜](http://stackoverflow.com/questions/37464954/pivot-table-pivotfields-position-returns-error-2042?noredirect=1#comment62430216_37464954) – skkakkar

答えて

0

フィルタまたはページフィールドの場合、これは「いいえ。」となります。 .Positionを使用しないでください。

For Each objCubeFld In pvt.PivotFields 'Loop through all fields in PivotTable 
    Cubefield(i) = objCubeFld 
    Orient(i) = objCubeFld.Orientation 'Orientation 
    If objCubeFld.Orientation = "3" Then 'When it is filter 
    Pos(i) = 1 
    Else 
    Pos(i) = objCubeFld.Position 'Position 
    End If 
    i = i + 1 
    Next objCubeFld 
+0

うんざりしてくれてうれしいです。 – skkakkar

関連する問題