Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Pivot Seitenfelder alle bis auf mit VBA

Pivot Seitenfelder alle bis auf mit VBA
lutz
Hallo Excel-Spezialisten,
ich würde gerne per Makro die Seitenfelder einer Pivottabelle selektieren.
Dabei soll im Blatt "Eingabe" im Bereich B7:C12 der jeweilige Monat stehen.
Excel kann m.W. im ersten Schritt nicht alle Felder nicht selektieren weil er dann aussteigt.
D.h. man muß wohl alle rausnehmn die nicht in dem Bereich stehen.
Ich habe hier einen Code im Forum gefunden der das mit einem Array macht:
Sub yyy()
Dim PI As PivotItem, arrItemsOn
arrItemsOn = Array("Januar", "Februar", "März")
With ActiveSheet.PivotTables(1).PivotFields("Monat")
For Each PI In .PivotItems
PI.Visible = Not IsError(Application.Match(PI, arrItemsOn, 0))
Next
End With
End Sub

Wie muß ich den Code anpassen damit er meinen Bereich als Array der zu selektierenden Werte nimmt?
Set rngTagesdat = Sheets("Eingabe").Range("B7:C12")
Kann jemand helfen?
Vielen Dank und viele Grüße Lutz

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Pivot Seitenfelder alle bis auf mit VBA
01.05.2012 19:47:17
fcs
Hallo Lutz,
Die Funktion "Match" (=Tabellenfunktion VERGLEICH) funktioniert nur in 1-spaltigen oder 1-zeiligen Zellbereichen oder Daten-Arrays.
Bei mehrspaltigem Zellbereich für die Vorgabewerte des Pagefield-Filters muss du mit Find -arbeiten.
Gruß
Franz
Sub yyy()
Dim PI As PivotItem, PF As PivotField, rngTagesdat As Range, rngZelle As Range
On Error GoTo Beenden
Set rngTagesdat = Worksheets("Eingabe").Range("B7:C12")
Set PF = ActiveSheet.PivotTables(1).PivotFields("Monat")
With PF
.ClearAllFilters
.EnableMultiplePageItems = True
For Each PI In .PivotItems
Set rngZelle = rngTagesdat.Find(What:=PI.Name, LookIn:=xlValues, lookat:=xlWhole)
PI.Visible = Not rngZelle Is Nothing
'      PI.Visible = Not IsError(Application.Match(PI, rngTagesdat, 0)) 'nur bei 1-spaltigem  _
Zellbereich
Next
End With
Beenden:
With Err
Select Case .Number
Case 0  'alles OK
Case 1004
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf _
& "Es muss mindestens ein Wert im Filter für """ & PF.Name & """ gesetzt sein"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub

Anzeige
AW: Pivot Seitenfelder alle bis auf mit VBA
02.05.2012 11:52:35
lutz
Hallo Franz,
vielen Dank. Klappt wie verrückt - ich hatte mit schon 16 variablen gebastelt und die dann in das Array eingebaut.
Da ist das natürlich deutlich eleganter.
Es gibt nur ein kleines Problem - bei
Case 1004
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf _
& "Es muss mindestens ein Wert im Filter für """ & PF.Name & """ gesetzt sein"
steigt er aus wenn man es aus dem falschen Blatt aufruft - ich denke das liegt an den Hochkommas?! (Habe mal was versucht aber es ging nicht.)
Wenn man nur
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
nimmt dann geht es aber.
Viele Grüße und vielen Dank Lutz
Anzeige
AW: Pivot Seitenfelder alle bis auf mit VBA
02.05.2012 13:30:16
fcs
Hallo Lutz,
fehlende Monate im Blatt "Eingabe" und Start von einem Blatt ohne Pivot führen zur gleichen Fehler-Nr, aber unterschiedlichem Meldetext.
Mit folgender Anpassung gehts dann mit entsprechendem Hinweis.
Gruß
Franz
Beenden:
With Err
Select Case .Number
Case 0  'alles OK
Case 1004
If PF Is Nothing Then
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf _
& "Vor dem Start des Makros muss das Tabellenblatt mit der Pivot selektiert werden"
Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf _
& "Es muss mindestens ein Wert im Filter für """ & PF.Name & """ gesetzt sein"
End If
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub

Anzeige
AW: Pivot Seitenfelder alle bis auf mit VBA
02.05.2012 14:33:09
lutz
Hallo Franz,
tausend Dank, jetzt geht wirklich alles!
Vielen lieben Dank und noch einen schönen Tag für Dich
Viele Grüße Lutz

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige