Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1368to1372
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Aktivierte Filter eines Pivotfeldes anzeigen

Aktivierte Filter eines Pivotfeldes anzeigen
15.07.2014 13:45:40
Niko
Hallo zusammen,
ich suche einen Weg, um die aktivierten Filter eines Feldes in einer Zelle auszugeben. Wenn ich mehr als zwei Werte aktiviere, wird (mehrere Elemente) angezeigt. Allerdings will ich hier die Werte angezeigt bekommen. Ich hoffe ihr könnte mir weiterhelfen. Als Beispiel habe ich hier eine Datei. Wenn ich in Zelle A1 zwei Kriterien auswähle, sollen diese Kriterien aufgelistet werden. (Dementsprechend bei allen Kriterien alle auflisten)
https://www.herber.de/bbs/user/91510.xlsx
Viele Grüße

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
15.07.2014 17:21:39
fcs
Hallo Niko,
das kann man meines Wissens nur per Makro umsetzen.
Darfs du in deiner Datei Makros einbauen?
In deiner Beispieldatei hast du keinen Pivotbericht sondern einen Autofilter eingerichtet. Für was willst du denn jetzt einen Filter auswerten?
Gruß
Franz

AW: Aktivierte Filter eines Pivotfeldes anzeigen
16.07.2014 09:03:23
Niko
Hallo,
ein Makro wäre grundsätzlich erlaubt. Hier in der Beispieldatei habe ich die Pivottabelle jetzt nicht drin.
In der Pivottabelle kann ich ja den Berichtsfilter einstellen. Man soll nachher halt in der Überschrift für die Pivottabelle sehen, welche Filter eingestellt worden sind. Wenn ich nur das Feld verlinke, wird mir bei mehreren aktivierten Filtern natürlich nur angezeigt, was in dem Feld steht (mehrere Elemente oder alle). Ich möchte allerdings, dass die aktivierten Filter aufgelistet werden.
Habe recherchiert und nichts zu gefunden. Und meine Makro-Kenntnisse sind nicht die Besten :-)
Viele Grüße
Viele Grüße

Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
16.07.2014 09:12:21
Niko
Hallo,
ein Makro wäre grundsätzlich erlaubt. Hier in der Beispieldatei habe ich die Pivottabelle jetzt nicht drin.
In der Pivottabelle kann ich ja den Berichtsfilter einstellen. Man soll nachher halt in der Überschrift für die Pivottabelle sehen, welche Filter eingestellt worden sind. Wenn ich nur das Feld verlinke, wird mir bei mehreren aktivierten Filtern natürlich nur angezeigt, was in dem Feld steht (mehrere Elemente oder alle). Ich möchte allerdings, dass die aktivierten Filter aufgelistet werden.
Habe recherchiert und nichts zu gefunden. Und meine Makro-Kenntnisse sind nicht die Besten :-)
Viele Grüße

Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
16.07.2014 13:20:30
fcs
Hallo Niko,
irgendwo im Pivot-Objektmodell hat Microsoft noch einen Bug eingebaut für das Item "(Leer")".
Dieses läßt sich nicht immer korrekt auswerten oder es wird "(blank)". Man könnte zwar noch ein paar Klimmzüge machen und die "DataRange" des Berichtsfeldes auswerten, aber 100% kriegt man da auch nicht hin und man muss dann auch noch die Sprache berücksichtigen.
Nachfolgend eine Function, die das per Parameter übergebene Feld auswertet, und ein Ereignismakro, das nach einer Aktualisierung der Pivottabelle gestartet wird.
Gruß
Franz
'Erstellt unter Excel 2010
'Code in einem allgemeinen Modul
Function fncBerichtsfilter(pvTable As PivotTable, strFieldName As String, _
Optional strSep As String = " | ") As String
'Zusammenstellen der selectierten Items im 1. Berichtsfeld eines Pivot-Tabellenberichts
Dim pvField As PivotField, pvItem As PivotItem
'Seitenfeld-Filter auslesen
Set pvField = pvTable.PageFields(strFieldName)
With pvField
fncBerichtsfilter = ""
If .EnableMultiplePageItems = True Then
For Each pvItem In .PivotItems
If Not IsError(pvItem.SourceName) Then
If pvItem.Visible = True Then
If fncBerichtsfilter = "" Then
fncBerichtsfilter = pvItem.Caption
Else
fncBerichtsfilter = fncBerichtsfilter & strSep & pvItem.Caption
End If
End If
End If
Next
Else
If .CurrentPage = "(Alle)" Or .CurrentPage = "(All)" Then
For Each pvItem In .PivotItems
If fncBerichtsfilter = "" Then
fncBerichtsfilter = pvItem.Caption
Else
fncBerichtsfilter = fncBerichtsfilter & strSep & pvItem.Caption
End If
Next
Else
fncBerichtsfilter = .CurrentPage.Caption
End If
End If
End With
End Function
'Ereignis-Makro unter dem Modul der Tabelle mit dem Pivotbericht
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
With Me
'in nächster Zeile _
- die Zelle (wo Filter eingetragen werden soll), _
- Name des Berichtsfeldes, _
- und ggf. den Trenntext zwischen den Filterwerten _
anpassen.
.Range("B2").Value = fncBerichtsfilter(pvTable:=Target, _
strFieldName:="Feld01", strSep:=";")
End With
End Sub
'PS. sind mehrere Pivottabellen auf dem Tabellenblatt, dann muss _
ggf. eine Prüfung auf den Namen der Pivot-Tabelle eingebaut werden

Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
17.07.2014 10:18:49
Niko
Hallo Franz,
wie soll es mit der Prüfung bei 2 Pivottabellen auf einem Arbeitsblatt gehen?
Im Moment habe ich 1 Sheet mit 2 Pivottabellen untereinander. Die Berichtsfilter gehen von B2:C4 (die 1. Tabelle hat immer die Standardgröße von B7:N14) und von B31:C33 (die 2 Tabelle hat immer eine dynamischer Größe, je nach der Datenbank).
Viele Grüße und danke schonmal für deine Bemühungen.
Niko

AW: Aktivierte Filter eines Pivotfeldes anzeigen
17.07.2014 11:02:13
fcs
Hallo Niko,
bei mehreren Pivottabellen muss du das Ereignismakro anpassen und ein Select Case -Konstrukt für die Prüfung einbauen.
Für jede Pivottabelle, deren Berichtsfilter in einer Zelle eingetragen werden soll, muss dann eine Case-Zeile vorhanden sein. Beim Namen auf genaue Schreibweise achten - am einfachsten ist es den im Menü PivotTable-Tools --- Optionen angezeigten Namen zu kopieren.
Gruß
Franz
Beispiel:
'Ereignis-Makro unter dem Modul der Tabelle mit dem Pivotbericht
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
With Me
Select Case Target.Name
Case "PivotTable 1"
'in nächster Zeile _
- die Zelle (wo Filter eingetragen werden soll), _
- Name des Berichtsfeldes, _
- und ggf. den Trenntext zwischen den Filterwerten _
anpassen.
.Range("B2").Value = fncBerichtsfilter(pvTable:=Target, _
strFieldName:="Feld01", strSep:=";")
Case "Pivot001"
.Range("D4").Value = fncBerichtsfilter(pvTable:=Target, _
strFieldName:="Währung", strSep:=";")
Case Else
'do nothing
End Select
End With
End Sub

Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
18.07.2014 09:55:19
Niko
Hallo Franz,
wie genau kann ich die Funktion =fncBerichtsfilter nun benutzen? Wenn ich die Formel benutze und ein entsprechendes Feld im Berichtsfilter auswähle, kommt #WERT. (Für eine Pivottabelle gibt es 3 Berichtsfilter mit Name, Departement und C/O)
Gruß
Niko

AW: Aktivierte Filter eines Pivotfeldes anzeigen
18.07.2014 12:04:44
fcs
Hallo Niko,
die bisherige Function funktioniert nur in Verbindung mit dem entsprechenden Ereignismakro/Makro, da als Parameter auch das PivotTable-Objekt übergeben werden muss.
Wenn du eine entsprechende Funktion in einer Tabellenformel nutzen willst, dann muss die Function etwas umgebaut werden und die auszuwertende Pivottabelle muss indirekt ermitelt werden.
Nachfolgend eine entsprechend modifizierte Function. Die ensprechende Formel in der Tabelle ist dann:
=fncBerichtsfilter_1(A5;";")

wobei A5 dann die Zelle mit dem Berichtsfeld ist.
Gruß
Franz
'Erstellt unter Excel 2010
'Code in einem allgemeinen Modul
Function fncBerichtsfilter_1(rngBerichtsfeld As Range, _
Optional strSep As String = " | ") As String
'Zusammenstellen der selektierten Items im Berichtsfeld eines Pivot-Tabellenberichts
'rngBerichtsfeld = Zelle mit einem Feldnamen im Berichtsfeld eines Pivotberichtes
'strSep          = Trenntext zwischen den ermittelten Filterwerten (Optional, Vorgabe = " | "
Dim pvTable As PivotTable, pvField As PivotField, pvItem As PivotItem, _
pvPageRange As Range
On Error GoTo Fehler
fncBerichtsfilter_1 = ""
'zur Zelle mit dem Berichtsfeld gehörigen Pivotbericht ermitteln
Set pvTable = rngBerichtsfeld.PivotTable
'Seitenbereich setzen
Set pvPageRange = pvTable.PageRange
'prüfen ob Formel-Zelle in 1. Spalte des Seitenbereiches
If Application.Intersect(rngBerichtsfeld, pvPageRange.Columns(1)) Is Nothing Then
fncBerichtsfilter_1 = "Zelle ist kein Pivottabellen-Berichtsfeld"
Exit Function
End If
'Seitenfeld-Filter auslesen
Set pvField = pvTable.PageFields(rngBerichtsfeld.Text)
With pvField
fncBerichtsfilter_1 = ""
If .EnableMultiplePageItems = True Then
For Each pvItem In .PivotItems
If Not IsError(pvItem.SourceName) Then
If pvItem.Visible = True Then
If fncBerichtsfilter_1 = "" Then
fncBerichtsfilter_1 = pvItem.Caption
Else
fncBerichtsfilter_1 = fncBerichtsfilter_1 & strSep & pvItem.Caption
End If
End If
End If
Next
Else
If .CurrentPage = "(Alle)" Or .CurrentPage = "(All)" Then
For Each pvItem In .PivotItems
If fncBerichtsfilter_1 = "" Then
fncBerichtsfilter_1 = pvItem.Caption
Else
fncBerichtsfilter_1 = fncBerichtsfilter_1 & strSep & pvItem.Caption
End If
Next
Else
fncBerichtsfilter_1 = .CurrentPage.Caption
End If
End If
End With
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case 1004
If pvTable Is Nothing Then
fncBerichtsfilter_1 = "Zelle ist außerhalb Pivottabelle"
Exit Function
End If
If pvPageRange Is Nothing Then
fncBerichtsfilter_1 = "Pivot-Tabelle hat keinen Seitenbereich"
Exit Function
End If
Case Else
fncBerichtsfilter_1 = "Fehler: " & .Number
End Select
End With
End Function

Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
21.07.2014 15:40:05
Niko
Vielen Dank!! Es funktioniert. Tschuldigung wegen der erst späten Antwort.
Viele Grüße :-)

140 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige