ich habe ein Tabellenblatt mit einer Pivot und 5 dazugehörigen Datenschnitten.
Je nachdem, in welchem Datenschnitt eine Auswahl getroffen wird, soll die Pivot entsprechend angepasst werden: es handelt sich um einen hierarchischen Drilldown von der obersten bis zur untersten Ebene.
Mein Problem: Das Makro soll von sich aus nach Auswahl eines Filters starten und auch irgendwann aufhören ;).
Wenn ich mit "Worksheet_PivotTableUpdate" oder "Worksheet_Change" arbeite, dann handelt es sich um eine Endlosschleife und das Makro endet nie.
Habt ihr hier eine Idee, wie ich das Makro anhand der Auswahl in einem Datenschnitt (und zwar egal in welchem der 5) nur einmal auslösen kann?
Herzlichen Dank für eure Mühe und viele Grüße
haze
Public Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
'### Etwas kryptische Formel: Wenn ein Eintrag im Datenschnitt aktiviert ist, dann bedeutet das _
_
= true!
'Deshalb werden "False" item angesprochen, ganz einfach deshalb: Es ist egal welcher Filter auf _
_
einen Datenschnitt angewendet wird,
'nur das ein Filter (Wie gesagt egal welcher) angesprochen wurde reicht aus, um das MAkro _
anzuwerfen!
Dim objItem As SlicerItem
Application.ScreenUpdating = False
For Each objItem In ActiveWorkbook.SlicerCaches("Datenschnitt_Cost_level_11").SlicerItems
If objItem.Selected = False Then 'Wenn ein Item abgewählt, dann Filter aktiv!
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 2").Orientation = _
_
xlHidden Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 2").Orientation = _
xlRowField
End If 'Blende das richtige Pivot Field ein (sofern noch nicht vorhanden) und alle _
_
anschließend aus
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 3").Orientation _
_
= xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 3").Orientation = _
_
xlHidden
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 4").Orientation _
_
= xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 4").Orientation = _
_
xlHidden
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost Element").Orientation _
_
= xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost Element").Orientation = _
_
xlHidden
End If
End If
Next
'### Ab hier analog oberer Block, aber auf die anderen Datenschnitte angewnedet (andere _
Pivot Field nötig)
For Each objItem In ActiveWorkbook.SlicerCaches("Datenschnitt_Cost_level_21").SlicerItems
If objItem.Selected = False Then
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 3").Orientation = _
xlHidden Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 3").Orientation = _
xlRowField
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 2").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 2").Orientation = _
xlHidden
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 4").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 4").Orientation = _
xlHidden
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost Element").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost Element").Orientation = _
xlHidden
End If
End If
Next
For Each objItem In ActiveWorkbook.SlicerCaches("Datenschnitt_Cost_level_31").SlicerItems
If objItem.Selected = False Then
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 4").Orientation = _
xlHidden Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 4").Orientation = _
xlRowField
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 3").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 3").Orientation = _
xlHidden
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 2").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 2").Orientation = _
xlHidden
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost Element").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost Element").Orientation = _
xlHidden
End If
End If
Next
For Each objItem In ActiveWorkbook.SlicerCaches("Datenschnitt_Cost_level_41").SlicerItems
If objItem.Selected = False Then
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost Element").Orientation = _
xlHidden Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost Element").Orientation = _
xlRowField
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 3").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 3").Orientation = _
xlHidden
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 4").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 4").Orientation = _
xlHidden
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 2").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 2").Orientation = _
xlHidden
End If
End If
Next
For Each objItem In ActiveWorkbook.SlicerCaches("Datenschnitt_Cost_Element1").SlicerItems
If objItem.Selected = False Then
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost Element").Orientation = _
xlHidden Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost Element").Orientation = _
xlRowField
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 3").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 3").Orientation = _
xlHidden
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 4").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 4").Orientation = _
xlHidden
End If
If ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 2").Orientation = _
_
xlRowField Then
ActiveSheet.PivotTables("CCCockpit").PivotFields("Cost level 2").Orientation = _
xlHidden
End If
End If
Next
Application.ScreenUpdating = True
End Sub