У меня есть сводная таблица, которая предназначена для суммирования моих данных на двух разных уровнях агрегирования в зависимости от выбора, сделанного пользователем.

В исходном состоянии вот списки feild для моей сводной таблицы: введите описание изображения здесь

Когда пользователь изменяет определенные параметры, следующий код скрывает IndexA из списка полей:

Sheets("test").PivotTables("test").PivotFields("IndexA").Orientation = xlHidden

И когда изменения отменяются, следующий код снова делает IndexA видимым:

Sheets("test").PivotTables("test").PivotFields("IndexA").Orientation = xlRowField

Результирующий список полей теперь выглядит следующим образом с измененным порядком элементов списка полей: введите описание изображения здесь

Обратите внимание, что в списке полей ROWS IndexA теперь находится внизу, а не вверху, что нарушает согласованность и удобочитаемость моего отчета.

У меня вопрос ... есть ли способ контролировать порядок списка сводных полей через VBA? или альтернативный способ добиться того же результата, который я ищу? (включение и выключение определенного элемента в списке полей с сохранением порядка)

Я ценю любую помощь / совет, который кто-либо может предоставить по этой теме.

0
Paul Fenton 26 Фев 2016 в 20:14
msdn.microsoft.com/en-us/library/office/dn254297. aspx adddatafield, возможно, addfield? Взгляните на объектную модель и посмотрите, возможно ли это. Возможно, вам придется удалить все поля, а затем добавить их обратно в том порядке, в котором вы хотите, вместо того, чтобы переупорядочивать их.
 – 
Cody G
26 Фев 2016 в 20:30
Я попытался удалить все поля и добавить их заново, но из-за всех этих дополнительных операций выполнение макросов заняло слишком много времени. Я реализовал ответ Скотта Хольцмана ниже, и он работает нормально.
 – 
Paul Fenton
27 Фев 2016 в 17:11

1 ответ

Лучший ответ

Это код для установки позиции:

With Sheets("test").PivotTables("test").PivotFields("IndexA")
    .Orientation = xlRowField
    .Position = 1
End With

Для справки в будущем я нашел это с помощью средства записи макросов и сделал это вручную, так как я не мог вспомнить синтаксис с головы до ног. Просто укажите на это, потому что запись ручных действий может оказаться очень удобной для поиска синтаксиса :)

1
Scott Holtzman 26 Фев 2016 в 20:36
1
Спасибо, Скотт! Это хорошо работает. Приятно напоминать себе, что нужно всегда пробовать макрорекордер, когда сомневаешься.
 – 
Paul Fenton
27 Фев 2016 в 17:12