Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Pivot nach aktuellem Feld Filtern

Pivot nach aktuellem Feld Filtern
jens
Hallo Excel-Profis,
ich habe ein paar Makros erstellt, die Pivotdatenfilter zurücksetzen:
Sub Test_Aufraeumen_Click()
On Error Resume Next
Dim f As PivotField, i As PivotItem
Application.ScreenUpdating = False
With ActiveSheet.PivotTables(1)
For Each f In .PageFields
f.CurrentPage = "(Alle)"
Next
For Each f In .RowFields
For Each i In f.PivotItems
If i.Visible = False Then
i.Visible = True
End If
Next
Next
End With
Application.ScreenUpdating = True
End Sub

Sub Test_Aufraeumen_ClickNotPage()
On Error Resume Next
Dim f As PivotField, i As PivotItem
Application.ScreenUpdating = False
With ActiveSheet.PivotTables(1)
For Each f In .RowFields
For Each i In f.PivotItems
If i.Visible = False Then
i.Visible = True
End If
Next
Next
End With
Application.ScreenUpdating = True
End Sub
Sub Test_Aufraeumen_ClickPage()
On Error Resume Next
Dim f As PivotField, i As PivotItem
Application.ScreenUpdating = False
With ActiveSheet.PivotTables(1)
For Each f In .PageFields
f.CurrentPage = "(Alle)"
Next
End With
Application.ScreenUpdating = True
End Sub

Mit denen bin ich auch zufrieden und stelle Sie gerne zur Verfügung.
Ich suche nun noch ein Makro das mir den Filter schnell setzt.
Wenn ich in der Zelle stehe und das Makro aktiviere, soll der Filter für diese Spalte auf den Wert gesetzt werden, denn die aktive Zelle gerade hat.
Kann mir jemand helfen?
Vielen Dank
Viele Grüße Jens

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

Betreff
Benutzer
Anzeige
AW: Pivot nach aktuellem Feld Filtern
13.08.2010 01:54:40
fcs
Hallo Jens,
nachfolgendes Makro sollte dafür passen. Erstellt hab ich es unter Excel 2007.
Gruß
Franz
Sub Test_Filtern_Pivotfeld_Click()
'Inhalt der aktiven Zelle wird als Filter für das entsprechende _
Zeilen- oder Spaltenfeld der Pivottabelle verwendet
On Error GoTo Fehler
Dim iIndex As Integer, vFilter, lZeile As Long
Dim f As PivotField, i As PivotItem
Application.ScreenUpdating = False
With ActiveCell.PivotTable
'Filterwert
vFilter = ActiveCell.Text
lZeile = ActiveCell.Row
If Not Intersect(ActiveCell, .RowRange) Is Nothing _
And lZeile > .RowRange.Row Then
'Pivottabellen-ReihenItem als Filterwert
iIndex = lSpalte - .RowRange.Column + 1
Set f = .RowFields(iIndex)
For Each i In f.VisibleItems
If i.Name  vFilter Then
i.Visible = False
End If
Next
'Pivottabellen-Spalten-Item als Filterwert
ElseIf Not Intersect(ActiveCell, .ColumnRange) Is Nothing _
And lZeile > .ColumnRange.Row Then
iIndex = lZeile - .ColumnRange.Row
Set f = .ColumnFields(iIndex)
For Each i In f.VisibleItems
If i.Name  vFilter Then
i.Visible = False
End If
Next
Else
MsgBox "Zum Filtern bitte eine Zelle mit Item im " _
& "Reihen- oder Spaltenfeldbereich wählen!"
End If
End With
Fehler:
With Err
Select Case .Number
Case 0 'Alles ok
Case 1004
MsgBox "Zum Filtern in Pivottabelle bitte eine Zelle mit Item im " _
& "Reihen- oder Spaltenfeldbereich wählen!"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbNewLine & .Description
End Select
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Pivot nach aktuellem Feld Filtern
13.08.2010 08:47:52
jens
Hallo Franz,
läuft bei mir nur in den Hauptfehler - siehe Anlage.
Vielen Dank schon einmal.
Viele Grüße Jens
P.S. hatte natürlich gestern etwas vergessen:
Ich kann alle Filter zurücksetzen, ich brächte aber auch etwas um nur den Filter der aktuellen Spalte zurückzusetzen.
Das Problem ist wohl, dass man die Spalten eigentlich mit Namen ansprechen muß aber man will ja ein immer funktionierendes Makro.
AW: Pivot nach aktuellem Feld Filtern
13.08.2010 11:57:37
fcs
Hallo Jens,
da hatte ich meine Beispiel-Pivottabelle wohl etwas zu einfach strukturiert.
Für Reihen und Spaltenfelder sollte es jetzt funktionieren. Es wird jetzt immer erst der Name des Reihen-/Spaltenfeldes ermittelt. Dann erfolgen Aktionen.
Beim Einblenden aller Items könnte noch eine Fehler-Meldung auftreten, deren Nummer ich aber nicht hab.
Makro sollte unter Excel 2003 und 2007 funktionieren.
Gruß
Franz
Sub Test_Filtern_Pivotfeld_Click()
'Inhalt der aktiven Zelle wird als Filter für das entsprechende _
Zeilen- oder Spaltenfeld der Pivottabelle verwendet
On Error GoTo Fehler
Dim iIndex As Integer, vFilter, lZeile As Long, lSpalte As Long
Dim f As PivotField, i As PivotItem, sFieldName As String
Application.ScreenUpdating = False
With ActiveCell.PivotTable
'Filterwert
vFilter = ActiveCell.Text
lZeile = ActiveCell.Row
lSpalte = ActiveCell.Column
If Not Intersect(ActiveCell, .RowRange) Is Nothing _
And lZeile > .RowRange.Row Then
'Pivottabellen-ReihenItem als Filterwert
iIndex = lSpalte - .RowRange.Column + 1
sFieldName = .RowRange(1, iIndex).Text
Set f = .RowFields(sFieldName)
For Each i In f.VisibleItems
If i.Name  vFilter Then
i.Visible = False
End If
Next
'Pivottabellen-Spalten-Item als Filterwert
ElseIf Not Intersect(ActiveCell, .ColumnRange) Is Nothing _
And lZeile > .ColumnRange.Row Then
iIndex = lZeile - .ColumnRange.Row
sFieldName = .ColumnRange(1, iIndex).Text
Set f = .ColumnFields(sFieldName)
For Each i In f.VisibleItems
If i.Name  vFilter Then
i.Visible = False
End If
Next
Else
MsgBox "Zum Filtern bitte eine Zelle mit Item im " _
& "Reihen- oder Spaltenfeldbereich wählen!"
End If
End With
Fehler:
With Err
Select Case .Number
Case 0 'Alles ok
Case 1004
MsgBox "Zum Filtern in Pivottabelle bitte eine Zelle mit Item im " _
& "Reihen- oder Spaltenfeldbereich wählen!"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbNewLine & .Description
End Select
End With
Application.ScreenUpdating = True
End Sub
Sub Test_Pivotfeld_Alle_Anzeigen_Click()
'Alle Items anzeigen in selektierte Zeilen/Spaltenfeld
On Error GoTo Fehler
Dim iIndex As Integer, lZeile As Long, lSpalte As Long
Dim f As PivotField, i As PivotItem, sFieldName As String
Application.ScreenUpdating = False
With ActiveCell.PivotTable
lZeile = ActiveCell.Row
lSpalte = ActiveCell.Column
If Not Intersect(ActiveCell, .RowRange) Is Nothing Then
'Pivottabellen-ReihenItem als Filterwert
iIndex = lSpalte - .RowRange.Column + 1
sFieldName = .RowRange(1, iIndex).Text
Set f = .RowFields(sFieldName)
For Each i In f.HiddenItems
i.Visible = True
Next
'Pivottabellen-Spalten-Item als Filterwert
ElseIf Not Intersect(ActiveCell, .ColumnRange) Is Nothing Then
iIndex = lZeile - .ColumnRange.Row
sFieldName = .ColumnRange(1, iIndex).Text
Set f = .ColumnFields(sFieldName)
For Each i In f.HiddenItems
i.Visible = True
Next
Else
MsgBox "Zum Filtern bitte eine Zelle mit Item im " _
& "Reihen- oder Spaltenfeldbereich wählen!"
End If
End With
Fehler:
With Err
Select Case .Number
Case 0 'Alles ok
Case 99999 'Nummer anpassen wenn Fehler kommt
'Pivot-Item  in Item List hat keine Daten mehr
Resume Next
Case 1004
MsgBox "Zum Filtern in Pivottabelle bitte eine Zelle mit Item im " _
& "Reihen- oder Spaltenfeldbereich wählen!"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbNewLine & .Description
End Select
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Pivot nach aktuellem Feld Filtern
13.08.2010 13:09:07
jens
Hallo Franz,
100 Punkte, geht beides echt toll.
Mit denen die ich schon hatte wird das die Arbeit in Pivotabellen wirklich um Längen vereinfachen.
Ich bewundere das immer, bin leider nicht so versiert in VBA.
Also noch mal tausend Dank und ein wunderschönes und sonniges Wochenende.
Liebe Grüße Jens

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige