Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1364to1368
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

Datenschnitteinstellungen auf einen anderen übertr

Datenschnitteinstellungen auf einen anderen übertr
27.06.2014 10:09:21
Pochi
Hallo zusammen,
ich habe mit großem Interesse diesen
https://www.herber.de/forum/archiv/1292to1296/1292743_PivotDatenschnitte_per_VBA_auslesen.html Thread gelesen in dem Datenschnitte ausgelesen und die Einstellungen in einem Array gespeichert werden.
Für mein aktuelles Projekt müsste ich allerdings weiter gehen: Ich habe ungefähr ein Dutzend Pivottabellen die alle auf den gleichen Rohdaten basieren und von mehreren, mit allen PT verbundenen Slicern gesteuert werden. Für eine Auswertung muss aber der Bericht etwas verändert werden, so dass eine darauf basierende PT nicht mehr den selben PivotCache nutzt und somit nicht mehr mit den Slicern verbunden werden können. Da die "Kategorien" der Rohdaten identisch bleiben, hat ein Slicer für die "neue" PT zwingend die gleichen Einträge wie die "alten".
Meine Idee war es, den Slicer mit dem oben genannten Code von fcs bei jeder Veränderung auszulesen und die Einstellungen an den neuen Slicer zu übertragen. (Oder gibt es vielleicht noch eine einfacherere Variante?)
Allerdings scheitere ich schon daran nur einen einzigen Slicer anstatt aller anzusprechen, da mir nicht ganz klar ist wie mit dem objslicer.cache umzugehen ist. Ich stelle mir den Rest der Aufgabe, nämlich das Ausspielen des Arrays auf einen anderen Datenschnitt gar nicht mehr so schwierig vor. Jedoch komme ich mit meinen bescheidenen VBA kenntnissen hier nicht weiter. Dass das Makro bei jeder Veränderung eines Slicers aufgerufen wird, habe ich schon erreichen können.
Danke und beste Grüße!
Pochi

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

Betreff
Datum
Anwender
Anzeige
AW: Datenschnitteinstellungen auf einen anderen übertr
27.06.2014 11:26:27
fcs
Hallo Pochi,
das abgleichen mehrerer Datenschnitte ist soger "einfacher" als das was ich in dem Makro gemacht habe.
Die Arrays mit den Namen der Datenschnitte musst du Anpassen. Es funktioniert auch mit einem Datenschnitt.
Gruß
Franz
'Erstellt unter Excel 2010
Sub Datenschnitte_abgleichen()
'Datenschnitte von Pivottabellen in Arbeitsmappe ableichen
Dim objSlicerCache As SlicerCache, objItem As SlicerItem
Dim objSlicerCache2 As SlicerCache
Dim intJ As Integer
Dim arrSlicerCacheNames1, arrSlicerCacheNames2
'Die Namen der Datenschnitte findet man im Dialogfenster "Datenschnitteinstellungen" _
hinter "In Formeln zu verwendender Name"
'Array mit Namen der originalen/vorgebenden Datenschnitte
arrSlicerCacheNames1 = Array("Datenschnitt_Feld01", "Datenschnitt_Währung")
'Array mit Namen der abzugleichenden Datenschnitte
arrSlicerCacheNames2 = Array("Datenschnitt_Feld011", "Datenschnitt_Währung1")
On Error Resume Next 'kann man weglassen, wenn in den Datenschnitten _
die gleichen Items vorhanden sind.
For intJ = LBound(arrSlicerCacheNames1) To UBound(arrSlicerCacheNames1)
Set objSlicerCache = ActiveWorkbook.SlicerCaches(arrSlicerCacheNames1(intJ))
Set objSlicerCache2 = ActiveWorkbook.SlicerCaches(arrSlicerCacheNames2(intJ))
'objSlicerCache2.ClearManualFilter 'nicht unbedingt erforderlich
For Each objItem In objSlicerCache.SlicerItems
objSlicerCache2.SlicerItems(objItem.Name).Selected = objItem.Selected
Next
Next
End Sub

Anzeige
AW: Datenschnitteinstellungen auf einen anderen übertr
30.06.2014 08:17:34
Pochi
Hallo Franz, liebe alle,
nanu, da hab ich am Freitag wohl nicht richtig auf abschicken geklickt. Dann eben auf ein Neues:
Vielen Dank Franz für deine schnelle Antwort und deine ausführlichen Kommentare im Code, so können bestimmt auch andere, die sich noch nicht so genau ins Thema Slicer eingelesen haben, davon profitieren.
Ich habe den Code natürlich direkt mit einem Slicer ausprobiert und er macht genau das was er soll (super!), mit einer Ausname: Er setzt nur neue Filter und deaktiviert sie nicht. Am besten Mal ein Beispiel:
(beide Slicer ohne aktivierte (geklickte) Buttons)
1. Quellslicer Button 1 geklickt
2. Makro ausgeführt -> Button 1 auch im Zielslicer aktiviert
3. Quellslicer Button 1 erneut geklickt (deaktiviert) und Button 2 aktiviert
4. Makro erneut ausgeführt -> Im Zielslicer sind jetzt Button 1 (fälschlicherweise) und Button 2 aktiviert
Oder habe ich vielleicht etwas falsch gemacht? Ich blick leider bei der Arraysache immer noch nicht durch, sonst würde ich selber versuchen es zu korrigieren...
Dank und Gruß
Pochi

Anzeige
AW: Datenschnitteinstellungen auf einen anderen übertr
30.06.2014 11:04:08
fcs
Hallo Pochi,
bei mir hat das Makro funktioniert, sowohl mit einem als auch 2 Datenschnitten als Quellslicer.
(beide Slicer ohne aktivierte (geklickte) Buttons)
1. Quellslicer Button 1 geklickt
2. Makro ausgeführt -> Button 1 auch im Zielslicer aktiviert
3. Quellslicer Button 1 erneut geklickt (deaktiviert) und Button 2 aktiviert
4. Makro erneut ausgeführt -> Im Zielslicer sind jetzt Button 1 (fälschlicherweise) und Button 2 aktiviert

Slicer ohne aktivierte Buttons gibt es nicht. Mindestens 1 Button ist immer aktiv bzw. muss immer aktiv sein.
Einen einzelnne Button kann man nicht deaktivieren. Klickt man auf einen 2. Button, dann werden die anderen Buttons deaktiviert. Bei gedrückter Strg-Taste kann man auch mehrere Buttons selektieren.
Ich hab jetzt noch ein wenig rumprobiert und es gibt tatsächlich Situationen, in denen im Zielslicer die alte Einstellung nicht geändert wird. Das ist immer dann der Fall, wenn eine alte Einstellung deaktiviert werden soll, aber noch keine neue gesetzt ist. Da im Slicer immer mindestens ein Item aktiv sein muss wird die alte Einstellung dann nicht aktiviert.
Abhilfe:
Variante A:
  For intJ = LBound(arrSlicerCacheNames1) To UBound(arrSlicerCacheNames1)
Set objSlicerCache = ActiveWorkbook.SlicerCaches(arrSlicerCacheNames1(intJ))
Set objSlicerCache2 = ActiveWorkbook.SlicerCaches(arrSlicerCacheNames2(intJ))
objSlicerCache2.ClearManualFilter 'alle Items aktivieren
'nicht gesetzte Items deaktiveren
For Each objItem In objSlicerCache.SlicerItems
Ff objItem.Selected = False Then
objSlicerCache2.SlicerItems(objItem.Name).Selected = False
End If
Next
Next

Variante B:
  For intJ = LBound(arrSlicerCacheNames1) To UBound(arrSlicerCacheNames1)
Set objSlicerCache = ActiveWorkbook.SlicerCaches(arrSlicerCacheNames1(intJ))
Set objSlicerCache2 = ActiveWorkbook.SlicerCaches(arrSlicerCacheNames2(intJ))
'gesetzte Items aktivieren
For Each objItem In objSlicerCache.SlicerItems
If objItem.Selected = True Then
objSlicerCache2.SlicerItems(objItem.Name).Selected = True
End If
Next
'nicht gesetzte Items deaktivieren
For Each objItem In objSlicerCache.SlicerItems
If objItem.Selected = False Then
objSlicerCache2.SlicerItems(objItem.Name).Selected = False
End If
Next
Next
Gruß
Franz

Anzeige
AW: Datenschnitteinstellungen auf einen anderen übertr
30.06.2014 11:29:16
Pochi
Hallo Franz,
1. du hast völlig Recht! Ich hab einen Denkfehler gemacht, dass wenn alle "deaktiviert" sind, ja letztlich alle Filterkriterien AKTIVIERT sind und deswegen kein Filter aktiviert ist. Somit habe ich auch Punkt drei in meiner Aufzählung falsch beschrieben.
2. Ich habe Variante A ausprobiert und sie funktioniert super! Danke dafür!
3. Kleiner Typo: In Zeile 7 müsste es If heißen ;)
Tausend Dank und liebe Grüße!
Pochi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige