vba Автоматическое восстановление сводной таблицы DataField
Мне было поручено вести отчет с несколькими сводными таблицами, в которых суммируются листы источника данных, которые обновляются еженедельно.
Источники данных имеют несколько заголовков столбцов, которые меняются (например, октябрь, ноябрь, декабрь и 9/14, 9/21, 9/28). Таким образом, каждый раз, когда сводные таблицы обновляются, PivotFields отбрасываются и должны быть добавлены вручную вручную … для меня королевская боль! Во всяком случае, я пытался автоматизировать «перестройку» этих сводных таблиц. У меня есть код, который добавит позиционированный PivotField, однако заголовок должен быть введен. Я ищу способ передать текст в столбце источника данных в код, который обновляет стержень. Я опубликовал версию, которая работает при вводе, и версия, которая не работает там, где я пытаюсь передать текст из источника данных. Я считаю, что я близок, но я просто не могу понять, почему этот подход не работает. Любая помощь или идеи будут высоко оценены.
Код, который работает:
Sub pivottable1() With ActiveSheet.PivotTables("PivotTable4").PivotFields("Sep Actual Hrs thru 9/25") .Orientation = xlDataField .Position = 2 End With End Sub
Моя попытка получить текст субтитров из источника данных (который в настоящее время не работает):
Sub PivotFieldAdd() Dim pf As PivotField Worksheets("Actual Data").Select 'name of the data source 'pf = Range("I3").Value 'With ActiveSheet.PivotTables("PivotTable4").PivotFields("pf") 'this doesn't work either. With ActiveSheet.PivotTables("PivotTable4").PivotFields = Range("I3").Value .Orientation = xlDataField .Position = 2 End With End Sub
(SOLVED) Назначение: восстанавливает точку поворота, когда изменяется заголовок столбца источника данных.
Sub WklyPivotFieldAdd() 'Purpose: rebuilds pivot when data source column header changes. Dim pf1 As String Dim pf2 As String Application.ScreenUpdating = False 'Stops screen flicker, increases speed. pf1 = Worksheets("Actual Data").[I3] 'Location of the data source column header that changes pf2 = Worksheets("Actual Data").[J3] 'Location of the data source column header that changes 'Sets the PivotField name to the source column name for second column in DataField With ActiveSheet.PivotTables("PivotTable4").PivotFields(pf1) .Orientation = xlDataField 'Places the new column in the DataField area .Position = 2 'Second column over End With 'Sets the PivotField name to the source column name for Fifth column in DataField With ActiveSheet.PivotTables("PivotTable4").PivotFields(pf2) .Orientation = xlDataField 'Places the new column in the DataField area .Position = 5 'Fifth column over End With Application.ScreenUpdating = True 'Starts automatic screen updating End Sub