Hallo,
ich habe auf einem Blatt eine Statistik, die sich aus den Zellen einer
Pivottabelle auf einem weiteren Blatt "bedient". Auf dem Blatt mit der
Pivottabelle habe ich Berichtsfilter definiert, die z.B. eine
Länderauswahl darstellt, wobei sich die Statistik auf Blatt 1 dann
automatisch aktualisiert.
Für den Anwender ist es aber mühsam, immer für einen Länderwechsel auf
das Pivotblatt zu gehen und dort das Filterdropdown zu bedienen, um dann
wieder auf die aktualisierte Statistk auf Blatt 1 zu wechseln -
kann man diesen Filter auf das Blatt mit der Statistik "verlagern"?
Danke für Tipps,
Markus
vielleicht liegt es auch daran, das die meisten Glaskugeln ein nur
verschwommenes Bild deiner Absicht erkennen lassen.
Es ist nicht einfach, sich auf das beschriebene ein Bild zu machen.
Ich könnte mir vorstellen, dass Du ein paar Dropdowns auf dem Statistik
Blatt hinterlegst, die Du mit den Bereichsfiltern verknüpfst, z.B. über
VBA (Makro Aufzeichnung bietet einen ersten Hinweis). Ansonsten mal
überlegen ob es einen geeigneten Ablageort einer anonymisierten Variante
geben könnte, damit man sich ein Bild machen kann.
Viel Glück weiterhin,
Robert
--
Nicht was Du sagst ist entscheidend, sondern was verstanden wird.
Hallo,
ich hatte gehofft dass meine Beschreibung verständlich wäre... aber gut.
Hier eine simple Demodatei:
http://www.fuenfrocken.com/misc/demo_pivotfilter.xlsx (150 KB)
Ziel: Auf dem Blatt "Statistik" soll der Filter für den Wochntag aus dem
Pivotblatt erscheinen, damit ich zum Filtern des Wochentags nicht immer
auf das Pivoblatt wechseln muss.
Am besten wäre natürlich wenn das mit "Bordmitteln" ohne VBA ginge.
Gruß,
Markus
Am 17.03.2011 09:52, schrieb Markus Fuenfrocken:
> Am besten wäre natürlich wenn das mit "Bordmitteln" ohne VBA ginge.
Leider habe ich auch keinen Weg gefunden den Pivotfilter mit einer
anderen Quelle zu verbinden. Die Fehlermeldung "keine Formel zulässig"
ist dir vermutlich auch schon begegnet. Einfach verschieben kann man das
Feld auch nicht.
Ich habe lediglich einen VBA Weg gefunden. Dazu platziere ich ein
ActiveX Steuerelement (Combobox) auf der Statistik Seite und lasse dort,
beim Click Ereignis, den gewünschten Filter als Listeneinträge auslesen.
So kann der Code auch für andere Filter verwendet werden.
Bei Auswahl eines Eintrags wird der Filter dann umgestellt. Auch das
geschieht mit neutralem Code und sollte sich einfach an andere Filter
anpassen lassen.
Ich hänge mal den benötigten Code hier rein, wenn Du den Code testen
möchtest wirst Du einige Zeilenumbrüche korrigieren müssen.
Ich kann dir bei Bedarf die Mustermappe auch zusenden.
Einziges Problem das ich nicht lösen konnte, beim ersten Aufruf der
Combobox wird diese einzeilig dargestellt (mit Scrollbuttons), beim
erneuten Aufklappen werden die Einträge dann gelistet. Habe nicht heraus
bekommen warum. Evtl. ein anderes Ereignis als Click verwenden?
Private Sub ComboBox1_Change()
Dim Pivotfilter
Set VAR_Pivot =
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag").PivotItems
Select Case ComboBox1.ListIndex
Case Is = 1
With
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag")
For Pivotfilter = 1 To VAR_Pivot.Count
.PivotItems(1).Visible = True
If Pivotfilter <> 1 Then
.PivotItems(Pivotfilter).Visible = False
Next
End With
Case Is = 2
With
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag")
For Pivotfilter = 1 To VAR_Pivot.Count
.PivotItems(2).Visible = True
If Pivotfilter <> 2 Then
.PivotItems(Pivotfilter).Visible = False
Next
End With
Case Is = 3
With
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag")
For Pivotfilter = 1 To VAR_Pivot.Count
.PivotItems(3).Visible = True
If Pivotfilter <> 3 Then
.PivotItems(Pivotfilter).Visible = False
Next
End With
Case Is = 4
With
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag")
For Pivotfilter = 1 To VAR_Pivot.Count
.PivotItems(4).Visible = True
If Pivotfilter <> 4 Then
.PivotItems(Pivotfilter).Visible = False
Next
End With
Case Is = 5
With
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag")
For Pivotfilter = 1 To VAR_Pivot.Count
.PivotItems(5).Visible = True
If Pivotfilter <> 5 Then
.PivotItems(Pivotfilter).Visible = False
Next
End With
Case Is = 6
With
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag")
For Pivotfilter = 1 To VAR_Pivot.Count
.PivotItems(6).Visible = True
If Pivotfilter <> 6 Then
.PivotItems(Pivotfilter).Visible = False
Next
End With
Case Is = 7
With
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag")
For Pivotfilter = 1 To VAR_Pivot.Count
.PivotItems(7).Visible = True
If Pivotfilter <> 7 Then
.PivotItems(Pivotfilter).Visible = False
Next
End With
Case Is = 8
With
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag")
For Pivotfilter = 1 To VAR_Pivot.Count
.PivotItems(Pivotfilter).Visible = True
Next
End With
End Select
Set VAR_Pivot = Nothing
End Sub
Private Sub ComboBox1_GotFocus()
Dim VAR_Pivot
Dim Zähler
Dim Pivotfilter
Set VAR_Pivot =
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag").PivotItems
Zähler = 1
ComboBox1.Clear
ComboBox1.AddItem "--- keine Auswahl ---", 0
For Each Pivotfilter In VAR_Pivot
ComboBox1.AddItem Pivotfilter, Zähler
Zähler = Zähler + 1
Next
If VAR_Pivot.Count > 10 Then
ComboBox1.ListRows = 10
Else
ComboBox1.ListRows = VAR_Pivot.Count + 1
End If
ComboBox1.ListIndex = 0
Set VAR_Pivot = Nothing
End Sub
Auch hier gilt, Zeilenumbrüche korrigieren, oder kurze Mitteilung, dann
sende ich das Funktionsmuster zu.
Private Sub ComboBox1_Change()
Dim Pivotfilter
Set VAR_Pivot =
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag").PivotItems
'da mindestens ein Filter gesetzt sein muss, mit dem setzen des zu
aktivierenden Filters starten
For Pivotfilter = 1 To VAR_Pivot.Count
If Pivotfilter = ComboBox1.ListIndex Then
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag").PivotItems(Pivotfilter).Visible
= True
Next
'dann alle anderen ausschalten
For Pivotfilter = 1 To VAR_Pivot.Count
If Pivotfilter <> ComboBox1.ListIndex Then
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag").PivotItems(Pivotfilter).Visible
= False
Next
'oder alle ein, falls "alle" (letzter Eintrag) gewählt wurde
For Pivotfilter = 1 To VAR_Pivot.Count
If VAR_Pivot.Count = ComboBox1.ListIndex Then
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag").PivotItems(Pivotfilter).Visible
= True
Next
Set VAR_Pivot = Nothing
End Sub
Private Sub ComboBox1_GotFocus()
Dim VAR_Pivot
Dim Zähler
Dim Pivotfilter
Set VAR_Pivot =
ThisWorkbook.Sheets("Pivot").PivotTables("PivotTable1").PivotFields("Wochentag").PivotItems
Zähler = 1
ComboBox1.Clear
ComboBox1.AddItem "--- keine Auswahl ---", 0
'liest alle Filterelemente in die Combobox ein
For Each Pivotfilter In VAR_Pivot
ComboBox1.AddItem Pivotfilter, Zähler
Zähler = Zähler + 1
Next
'setzt die Listeinträge auf max 10 fest
If VAR_Pivot.Count > 10 Then
ComboBox1.ListRows = 10
Else
ComboBox1.ListRows = VAR_Pivot.Count + 1
End If
'Aktivierung von "keine Auswahl" damit Change eintritt wenn ein
Filter gewählt wird.
Hallo Robert,
zunächst tausend Dank für die Mühe die Du Dir gemacht hast!
Ich werde das in den nächsten Tagen versuchen nachzuvollziehen und
auszuprobieren, bin mit VBA bisher kaum in Berührung gekommen und muss
mich deshalb dort ein wenig einarbeiten.
Gruß,
Markus