У меня есть отчет, который проходит и меняет различные поля поворота и копирует некоторые данные на другой лист. Я сделал макрос для него, который работает, но это, по сути, результаты моих кликов. Я хотел бы написать подраздел, который я могу передать в сводной таблице, сводном поле и имени элемента управления и обновить поля таким образом, а не копировать и вставлять действия снова и снова. Вот один его фрагмент, который устанавливает три фильтра в сводной таблице.vba update pivot items
`Worksheets("Closed Pivot").Activate
With ActiveSheet.PivotTables("PivotTable5").PivotFields("Business")
.PivotItems("NEW").Visible = True
.PivotItems("Pre-Paid Maint").Visible = False
.PivotItems("Renewal").Visible = False
.PivotItems("Training/Pro Svc").Visible = False
.PivotItems("Upsell/Cross-sell").Visible = False
.PivotItems("(blank)").Visible = False
.PivotItems("#N/A").Visible = False
End With
ActiveSheet.PivotTables("PivotTable5").PivotFields("Stage"). _
EnableMultiplePageItems = True
With ActiveSheet.PivotTables("PivotTable5").PivotFields("Revenue Channel")
.PivotItems("2-Tier Distributor").Visible = True
.PivotItems("Direct Sales").Visible = True
.PivotItems("Direct VAR").Visible = True
.PivotItems("Ecommerce").Visible = True
.PivotItems("Maintenance Renewal").Visible = True
.PivotItems("(blank)").Visible = True
End With
With ActiveSheet.PivotTables("PivotTable5").PivotFields("Stage")
.PivotItems("Closed Lost").Visible = False
.PivotItems("Closed Won").Visible = True
.PivotItems("(blank)").Visible = False
End With`
Вы действительно хотите передавать объекты PivotTable, PivotField и PivotItem или вы хотите ссылаться на них по имени? Кроме того, как вы намерены передавать эти переменные? Из пользовательского интерфейса или через VBA? Другими словами, где вы получаете ввод для рутины, в которой вы нуждаетесь? Подсказка: ваш собственный вопрос уже говорит о необходимости: 'Sub FilterPivot (pt as PivotTable, pf as PivotField, pi как PivotItem)' или альтернативно 'Sub FilterPivot (ptStr как строка, pfStr как строка, piStr как строка)' –
моя оригинальная мысль должен был передать их по значению и вызвать их в коде vba, так как после того, как это будет сделано, он будет работать одинаково, но я не знаю, будет ли лучше работать только ссылки. –
Ну, это не имеет большого значения. Вопрос заключается в том, хотите ли вы сами передавать сами сводные данные (поскольку они являются объектами, ByVal или ByRef не имеет значения, поскольку VBA все равно будет передавать ссылку) или строки, которые будет использоваться подпрограммой, чтобы найти соответствующие значения, поля и т. Д. Пожалуйста, покажите мне, что вы запрограммировали до сих пор над записанным образцом выше, и я постараюсь изо всех сил помочь вам. –