Когда вы записываете макрос, вы получите что-то вроде этого
Sub Macro1()
'
' Macro1 Macro
'
'
ActiveSheet.PivotTables("PivotTable2").PivotFields("[_Data].[Date].[Date]"). _
ClearAllFilters
ActiveSheet.PivotTables("PivotTable2").PivotFields("[_Data].[Date].[Date]"). _
CurrentPage = "[_Data].[Date].&[2019-08-16T00:00:00]"
End Sub
Даже если макрос дал вам этот код, он выдаст ошибку, если вы запустите его напрямую, ничего не меняя.
Решение : Это очень старая проблема, которую можно решить, изменив CurrentPage
на CurrentPageName
Теперь изменив его в соответствии с вашими потребностями ...
Sub Sample()
Dim ws As Worksheet
Set ws = Sheet1
Dim rngDt As Range
Set rngDt = ws.Range("D2")
Dim dtString As String
dtString = Format(rngDt.Value2, "yyyy-mm-dd")
Dim pt As PivotTable
Set pt = ws.PivotTables("PivotTable2")
Dim pf As PivotField
Set pf = pt.PivotFields("[_Data].[Date].[Date]")
pf.ClearAllFilters
pf.CurrentPageName = "[_Data].[Date].&[" & dtString & "T00:00:00]"
End Sub
РЕДАКТИРОВАТЬ
Могу я вас спросить ... как я могу выбрать НЕСКОЛЬКО сводных точек на одном листе и сделать то же самое с их фильтрами, выбрав ту же дату ( ячейка D2) для всех? Просто повторите код, добавив подстановку в названиях, или что-то вроде массива сработает? Еще раз спасибо, отмечая ваш как ответ! - изучение этого материала 2 дня a go
Вы можете сделать это за l oop. Для каждого pt в ws.PivotTables, а затем для каждого pf в pt.PivotFields :) - Siddharth Rout 2 дня a go
Спасибо .... где мне поместить эти строки? Я пробовал пару мест, которые, как мне казалось, имели смысл, но продолжаю получать ошибки. Я буду продолжать пробовать варианты, задаваясь вопросом, нужно ли мне удалить строки 'set pt / pf'? Спасибо. - изучение этого материала 14 часов a go>
У них такое же поле «Дата»? - Siddharth Rout 13 часов go
Да, все они практически идентичны. Те же фильтры. - изучение этого материала 11 часов a go
Вы можете попробовать что-то вроде этого ( Untested )
Sub Sample()
Dim ws As Worksheet
Set ws = Sheet1
Dim rngDt As Range
Set rngDt = ws.Range("D2")
Dim dtString As String
dtString = Format(rngDt.Value2, "yyyy-mm-dd")
Dim pt As PivotTable
Dim pf As PivotField
For Each pt In ws.PivotTables
Set pf = pt.PivotFields("[_Data].[Date].[Date]")
pf.ClearAllFilters
pf.CurrentPageName = "[_Data].[Date].&[" & dtString & "T00:00:00]"
Next pt
End Sub
EDIT
В соответствии с просьбой OP отредактировать этот ответ, поскольку существует несколько точек поворота, в приведенный выше код, наконец, были внесены следующие изменения.
Sub Sample2()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
Dim rngDt As Range
Set rngDt = ws.Range("F32")
Dim dtString As String
dtString = Format(rngDt.Value2, "yyyy-mm-dd")
Dim pt As PivotTable
Dim pf As PivotField
For Each pt In ws.PivotTables
If pt = "PivotTable2" Then
Set pf = pt.PivotFields("[_Data].[Date].[Date]")
pf.ClearAllFilters
pf.CurrentPageName = "[_Data].[Date].&[" & dtString & "T00:00:00]"
Else
Set pf = pt.PivotFields("[Sales_Data].[Date].[Date]")
pf.ClearAllFilters
pf.CurrentPageName = "[Sales_Data].[Date].&[" & dtString & "T00:00:00]"
End If
Next pt
End Sub