Filtrando várias tabelas dinâmicas com base em seleções suspensas usando VBA
Espero que alguém possa ajudar. Eu tenho um painel criado por outra pessoa, onde existem inúmeras tabelas nas planilhas, todas operando nas seleções de datas suspensas (De - até) na planilha 1. Foi-me pedido para adicionar isso e criaram tabelas dinâmicas mais adequadas para o trabalho. O problema que tenho é que preciso deles para filtrar com base nas datas suspensas na folha 1.
Espero que isso seja possível via VBA.
Consegui fazer meus relatórios dinâmicos filtrarem com base em outro menu suspenso, que é baseado em texto. Mas não é possível obter o mesmo código (quando ajustado para focar na opção "mês" e na célula suspensa associada) para trabalhar para uma seleção de data, e também não consigo descobrir como permitir várias seleções para poder escolher o período.
O código que tenho usado é o seguinte:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Dim pt As PivotTable
Dim pi As PivotItem
Dim strField As String
strField = "Region"
On Error Resume Next
Application.EnableEvents = False
Application.ScreenUpdating = False
If Target.Address = Range("D2").Address Then
For Each ws In ThisWorkbook.Worksheets
For Each pt In ws.PivotTables
With pt.PageFields(strField)
For Each pi In .PivotItems
If pi.Value = Target.Value Then
.CurrentPage = Target.Value
Exit For
Else
.CurrentPage = "(All)"
End If
Next pi
End With
Next pt
Next ws
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Qualquer ajuda que alguém possa fornecer seria muito apreciada. Eu sou bastante novo no VBA e estou tentando o meu melhor para ajustar o código que estou encontrando on-line, mas com dificuldades.
obrigado
Revisado: também tentei o código abaixo que encontrei em outro lugar que estava sendo usado para selecionar períodos
Sub FilterPivotDates()
'
Dim dStart As Date
Dim dEnd As Date
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Application.ScreenUpdating = False
On Error Resume Next
dStart = Sheets("Pivots").Range("F2").Value
dEnd = Sheets("Pivots").Range("f3").Value
Set pt = ActiveSheet.PivotTable1
Set pf = pt.PivotFields("Month")
pt.ManualUpdate = True
pf.EnableMultiplePageItems = True
For Each pi In pf.PivotItems
pi.Visible = True
Next pi
For Each pi In pf.PivotItems
If pi.Value < dStart Or pi.Value > dEnd Then
pi.Visible = False
End If
Next pi
Application.ScreenUpdating = False
pt.ManualUpdate = False
Set pf = Nothing
Set pt = Nothing
End Sub
No exemplo, descobri que isso estava sendo operado por um botão, mas tentei na folha. Mas isso também não funciona para mim.