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

Datenschnitt automatisch filtern per doppelklick

Datenschnitt automatisch filtern per doppelklick
20.12.2012 07:31:29
Tobias
Hallo,
ich habe eine Aufgabe welche nur mit Makro zu lösen ist. Und zwar möchte ich auf einem Tabellenblatt (in meiner Beispieldatei) "Artikelliste" per doppelklick zwei Werte in die Zwischenablage kopieren. Diese beiden Werte sollen dann zur Filterung eines Datenschnitts auf einem anderen Tabellenblatt verwendet werden. Wäre sehr froh wenn mir hier jemand helfen kann. Vielen Dank!
VG, Tobias
https://www.herber.de/bbs/user/83087.xlsx

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenschnitt automatisch filtern per doppelklick
20.12.2012 09:25:27
Klaus
Hi,
in das Blatt "Artikelliste"
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim sOne As String
Dim sTwo As String
If Target.Column = 3 Then
sOne = Cells(Target.Row, 1)
sTwo = Cells(Target.Row, 2)
Debug.Print sOne & sTwo
Sheet2.Activate
With ActiveWorkbook.SlicerCaches("Datenschnitt_Warengruppe")
.SlicerItems("Gruppe1").Selected = (.SlicerItems("Gruppe1").Value = sOne)
.SlicerItems("Gruppe2").Selected = (.SlicerItems("Gruppe2").Value = sOne)
.SlicerItems("Gruppe3").Selected = (.SlicerItems("Gruppe3").Value = sOne)
.SlicerItems("Gruppe4").Selected = (.SlicerItems("Gruppe4").Value = sOne)
.SlicerItems("Gruppe5").Selected = (.SlicerItems("Gruppe5").Value = sOne)
.SlicerItems("Gruppe6").Selected = (.SlicerItems("Gruppe6").Value = sOne)
.SlicerItems("Gruppe7").Selected = (.SlicerItems("Gruppe7").Value = sOne)
.SlicerItems("Gruppe8").Selected = (.SlicerItems("Gruppe8").Value = sOne)
.SlicerItems("Gruppe9").Selected = (.SlicerItems("Gruppe9").Value = sOne)
.SlicerItems("Gruppe10").Selected = (.SlicerItems("Gruppe10").Value = sOne)
.SlicerItems("Gruppe11").Selected = (.SlicerItems("Gruppe11").Value = sOne)
.SlicerItems("Gruppe12").Selected = (.SlicerItems("Gruppe12").Value = sOne)
.SlicerItems("Gruppe13").Selected = (.SlicerItems("Gruppe13").Value = sOne)
.SlicerItems("Gruppe14").Selected = (.SlicerItems("Gruppe14").Value = sOne)
.SlicerItems("Gruppe15").Selected = (.SlicerItems("Gruppe15").Value = sOne)
.SlicerItems("Gruppe16").Selected = (.SlicerItems("Gruppe16").Value = sOne)
.SlicerItems("Gruppe17").Selected = (.SlicerItems("Gruppe17").Value = sOne)
.SlicerItems("Gruppe18").Selected = (.SlicerItems("Gruppe18").Value = sOne)
.SlicerItems("Gruppe19").Selected = (.SlicerItems("Gruppe19").Value = sOne)
End With
With ActiveWorkbook.SlicerCaches("Datenschnitt_Artikel")
.SlicerItems("Artikel1").Selected = (.SlicerItems("Artikel1").Value = sTwo)
.SlicerItems("Artikel2").Selected = (.SlicerItems("Artikel2").Value = sTwo)
.SlicerItems("Artikel3").Selected = (.SlicerItems("Artikel3").Value = sTwo)
.SlicerItems("Artikel4").Selected = (.SlicerItems("Artikel4").Value = sTwo)
.SlicerItems("Artikel5").Selected = (.SlicerItems("Artikel5").Value = sTwo)
End With
Else
'do nothing
End If
End Sub
Die endlose Codewiederholung für SlicerItems 1 bis 99 kann man bestimmt auch in eine übersichtliche for-each Schleife packen.
Grüße,
Klaus M.vdT.

Anzeige
AW: Datenschnitt automatisch filtern per doppelklick
20.12.2012 11:43:13
Tobias
Hallo Klaus,
vielen Dank für Ihre Antwort und die Hilfe!
Gibt es eine Möglichkeit nur den Filterwert zu setzen? D.h. den Code so umzustellen dass nur noch zwei Zeilen bleiben… etwa so… (funktioniert natürlich nicht)
With ActiveWorkbook.SlicerCaches("Datenschnitt_Warengruppe")
.SlicerItems.Value = löschen (im ersten Schritt werden alle Filter gelöscht)
.SlicerItems.Value = sOne (im zweiten Schritt wird nur der Wert sOne gesetzt)
With ActiveWorkbook.SlicerCaches("Datenschnitt_Artikel")
.SlicerItems.Value = löschen (im ersten Schritt werden alle Filter gelöscht)
.SlicerItems.Value = sTwo (im zweiten Schritt wird nur der Wert sTwo gesetzt)

Anzeige
sicher, nur ich kanns nicht ...
20.12.2012 11:59:11
Klaus
Hallo Tobias,
"never tuch running code" :-)
Nein, ich hab ja selbst drunter geschrieben dass man das sicherlich noch optimieren kann. Nur ich kanns nicht, ich weiss nicht wie man ein .SlicerItem innerhalb einer schleife referenziert. (Ich weiss nichtmal was ein SlicerItem ist oder wie man eins erstellt, scheint Teil einer Pivot-Tabelle zu sein? Den o.g. Code habe ich aus dem Makrorekorder rekonstruiert, darum ist der auch so umständlich)
In Pseudocode währs ungefähr so:
for each n in SlicerItems.Count
slicerItems(n).selected = (slicerItems(n).value = sOne)
next n
Vielleicht meldet sich ja jemand, der's kann.
Wie viele SlicerItems hast du denn in deiner Originaltabelle? 100? Wenn du nur funktionalen Code und keinen schönen brauchst, ist das doch schnell zusammenkopiert / getippt.
Grüße,
Klaus M.vdT.

Anzeige
AW: sicher, nur ich kanns nicht ...
20.12.2012 13:28:24
Tobias
Danke, dann hoffe ich dass sich noch jemand meldet. Es sind mehr als 1000 Items in der Tabelle, deshalb wärs etwas viel...

Notfall-Workaround?
20.12.2012 13:48:59
Klaus
Hi Tobias,
wenn ich das sofort brauchen würd bevor sich jemand zur optimierung meldet, würd ich:
1) ein neues, leeres Excelblatt erstellen
2) diese Formel
=".SlicerItems(""Gruppe"&ROW()&""").Selected = (.SlicerItems(""Gruppe"&ROW()&""").Value = sOne)"
in A1 schreiben
3) A1 bis A1000 oder so kopieren
4) alles markieren, STRG+C und an der entsprechenden Stelle im Code STRG+V
*zu 2: bei dir warscheinlich ZEILE() statt ROW()
nicht schön ... aber müsste funktionieren.
Die genaue Frage ("Wie sprech ich mehrere Pivot-Slicer-Items mit For-Each an?") würd ich danach nochmal mit einem aussagekräftigem Titel in einem neuen Thread stellen.
Grüße,
Klaus M.vdT.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige