Clever-Excel-Forum

Normale Version: VBA Pivot multiple Datumsfilter
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag zusammen,

ich habe eine Herausforderung multiple Daten per VBA in einer Pivottabelle zu filtern.

Ich habe eine kleine Tabelle (Daten) erstellt in meiner Datei. In R0 habe ich eine Aufsummierung der Rechnungssummen, die ich diskreter Weise entfernt habe. In R0 will ich eine Schaltfläche, die mir im Tabellenblatt "R1" die Pivottabelle mit den eingetragenen Datumsangaben filtert. Für das Beispiel will ich also, dass ich die Datum, die in B1 - B7 stehen in R1 im PivotFeld Proforma gefiltert werden.

Leider kriege ich keine Lösung. Ich schaffe es lediglich mit einem einzigen Datum :(

Ungefähr so:
Code:
Sheets("R1").Select
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Rechnung").ClearAllFilters
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Rechnung").CurrentPage = _
        "(All)"
   
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Proforma").ClearAllFilters
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Proforma").CurrentPage = CDate([I1])

Ich hoffe mir kann jemand behilflich sein

Vielen Dank im Voraus
Beste Grüße
So... hier auch mit Anhang
Hi

Versuch es so.
Code:
Sub Makro1()
Dim a

With Sheets("R1").PivotTables("PivotTable1").PivotFields("Proforma")
  Sheets("R1").PivotTables("PivotTable1").RefreshTable
  .EnableMultiplePageItems = True
   For Each a In .PivotItems
     a.Visible = WorksheetFunction.CountIf(Range("B1:B7"), a) > 0
   Next a
End With
End Sub
Gruß Elex
Hallo

Zum Filtern benötigst du kein VBA, nutze Datenschnitte.
Erstelle ein Slicer:

Code:
Sub M_snb()
    With ActiveWorkbook.SlicerCaches("Slicer_Proforma")
      c00 = Join(Array(.SlicerItems(1).Name, .SlicerItems(2).Name, .SlicerItems(4).Name), "_")

      For Each it In .SlicerItems
          it.Selected = InStr(c00, it.Name)
        Next
    End With
End Sub
(02.04.2022, 14:42)Elex schrieb: [ -> ]Hi

Versuch es so.
Code:
Sub Makro1()
Dim a

With Sheets("R1").PivotTables("PivotTable1").PivotFields("Proforma")
  Sheets("R1").PivotTables("PivotTable1").RefreshTable
  .EnableMultiplePageItems = True
   For Each a In .PivotItems
     a.Visible = WorksheetFunction.CountIf(Range("B1:B7"), a) > 0
   Next a
End With
End Sub
Gruß Elex

funktioniert genau wie ich es mir vorgestellt habe

(02.04.2022, 16:56)PIVPQ schrieb: [ -> ]Hallo

Zum Filtern benötigst du kein VBA, nutze Datenschnitte.

hi,

ich wollte mit VBA, da ich im Anschluss noch Mails automatisch versende und die Vorgehensweise 5 mal hinternander mit 5 Tabellenblätter mache. 

Danke trotzdem für deine Mühe

(02.04.2022, 17:16)snb schrieb: [ -> ]Erstelle ein Slicer:

Code:
Sub M_snb()
    With ActiveWorkbook.SlicerCaches("Slicer_Proforma")
      c00 = Join(Array(.SlicerItems(1).Name, .SlicerItems(2).Name, .SlicerItems(4).Name), "_")

      For Each it In .SlicerItems
          it.Selected = InStr(c00, it.Name)
        Next
    End With
End Sub

nicht ausprobiert, da ich bereits die Lösung von Elex verwendet habe.

Danke trotzdem für deine Mühe