Если вы измените .CurrentPage
на что-то, что не существует , то вместо этого он переименует текущую выбранную страницу / элемент. (Если вы сделаете это вручную, а не через VBA, вы получите окно подтверждения: «В отчете сводной таблицы нет элемента с таким именем. Переименуйте« Old_Name »в« New_Name »?» С помощью «OK» и «Отмена» кнопка "
Вы можете частично предотвратить это, включив для этого поля «Показать элементы без данных», и / или вы можете использовать WorksheetFunction.CountIf
, чтобы проверить, существует ли это значение, перед изменением .CurrentPage
Что касается сброса элементов: установите .Name
, .Value
или .Caption
из PivotItem
обратно на SourceName
:
Dim piTMP AS PivotItem, pfTMP AS PivotField
Set pfTMP = sht.PivotTables("PivotTable1").PivotFields("WEEK")
For Each piTMP In pfTMP.PivotItems
piTMP.Name = piTMP.SourceName
Next piTMP
Если имена были изменены для 2 элементов, вы столкнетесь с проблемой (одно и то же имя не может существовать дважды), поэтому вам нужно либо проверить используемое имя, либо просто перебить его 2 циклы - что, вероятно, является более простым решением для записи:
Dim piTMP AS PivotItem, pfTMP AS PivotField
Set pfTMP = sht.PivotTables("PivotTable1").PivotFields("WEEK")
'Once through
For Each piTMP In pfTMP.PivotItems
piTMP.Name = piTMP.SourceName & "_AndSomeTextThatYouNeverUse"
Next piTMP
'Twice through
For Each piTMP In pfTMP.PivotItems
piTMP.Name = piTMP.SourceName
Next piTMP