2016-05-19 4 views
0

Мы можем использовать нижеприведенный код для создания сводной таблицы (это сводная таблица, созданная Power Pivot).Используйте VBA для захвата полей в сводной таблице

With ActiveSheet.PivotTables("PivotTable1").CubeFields(FieldName) 
      .Orientation = Orientation 
      .Position = Position 

Есть ли способ обратить вспять процесс? Предположим, пользователь создал сводную таблицу. Мы используем VBA для захвата полей, используемых в таблице (найдите соответствующие FieldName(s), Orientation(s), and Position(s)) и сохраните их, поэтому в следующий раз пользователь может просто запустить макрос и снова создать ту же сводную таблицу.

Благодаря

+0

Для каждого objCubeFld в ActiveSheet.PivotTables ("PivotTable1"). PivotFields ..... Следующая objCubeFld Используйте этот синтаксис. Затем поработайте над кодом, чтобы выяснить, как сохранить значения где-нибудь, а затем как перезагрузить сводную таблицу. Если у вас есть конкретная проблема с этим, задайте вопрос об этом. – OpiesDad

+0

@ OpiesDad Привет, спасибо за ответ. Я попробовал, и это сработало, но есть некоторые вопросы. Он не может различать, находятся ли поля в строке, или в столбце, или в фильтре. – NewGuyComesIn

+0

Свойство objCubeFld.Orientation не работает? – OpiesDad

ответ

0

Благодарности к @OpiesDad. Ниже будет работать.

Sub Func1() 
Dim objCubeFld As PivotField 
Dim pvt As PivotTable 
Set pvt = ActiveSheet.PivotTables("PivotTable1") 
For Each objCubeFld In pvt.PivotFields 
MsgBox objCubeFld & "-" & objCubeFld.Orientation 
Next objCubeFld 
End Sub 
Смежные вопросы