2016-05-26 3 views
0

Я использую VBA для захвата всех областей, помещенных в сводную таблицу. Код находится нижеPivot Table 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 Нет. Любое поле не удастся, а не только дата. Я просто испытал. – NewGuyComesIn

+0

Я совсем недавно начал изучать сводные таблицы, Как я собрал из Интернета. Field.CurrentPage работает только для полей фильтра (также называемых полями страницы). Если вы хотите, чтобы отфильтровать поле строк/столбцов, вы должны перебрать отдельные элементы, например, так: ~ с полем Если .Orientation = xlPageField Тогда .CurrentPage = Значение ELSEIF .Orientation = xlRowField Or. Ориентация = xlColumnField [Then SO Reference Reference ~] (http://stackoverflow.com/questions/37464954/pivot-table-pivotfields-position-returns-error-2042?noredirect1_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