Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1572to1576
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

Filtern aus Zellinhalten

Filtern aus Zellinhalten
10.08.2017 13:57:16
SJ
Hallo VBA-Experten,
ich möchte verschiedene Elemente einer Auswertung von einem Bereich in eine Zelle kopieren.
Danach möchte ich, dass nur diese kopierten Inhalte in einem Filter angeklickt werden.
Anbei mein Code:
Sub Kopieren_Filterelemente()
'Kopieren der Auswertung
Range("A40:A45").Select
Selection.Copy
ActiveWindow.SmallScroll Down:=-48
Range("M5").Select
ActiveSheet.Paste
' Auswahl der kopierten Merkmale im Filter für Regionen
With Sheets("Original").PivotTables(1)
.PivotFields("Region").CurrentPage = Sheets("Original").[M5].Value
End With
End Sub

Wie ist es hier möglich eine Mehrfachauswahl zu treffen, auf Basis der kopierten Daten?
Liebe Grüße

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Pivot-Tabellenbericht - Filtern aus Zellinhalten
13.08.2017 10:42:16
fcs
Hallo SJ,
Wie ist es hier möglich eine Mehrfachauswahl zu treffen, auf Basis der kopierten Daten?
Das ist leider nicht ganz so einfach.
Man muss den Filter für das Seitenfeld zurücksetzen, die Mehrfach-Auswahl aktivieren und dann alle für alle Regionen, die in den selektierten Regionen nicht vorhanden sind, die Eigenschaft Visible auf False setzen. Dann gibt es noch die Sonderfälle "leere Zelle" und "", die man extra behandeln muss.
Damit es keine Probleme mit Karteileichen gibt (Items, die mal vorhanden waren, dann aber wieder gelöscht wurden/nicht mehr vorkommen) muss folgende Option für den Pivotbericht unbedingt gesetzt werden:
Userbild
Gruß
Franz
Sub Kopieren_Filterelemente()
'Kopieren der Auswertung
Dim rngFilter As Range, rngZelle As Range
Dim pvField As PivotField, pvItem As PivotItem, bolSelect As Boolean
Dim wksSelect As Worksheet
Set wksSelect = Worksheets("Tabelle1") 'Name des Blattes in dem die Zellen mit den _
Filterkriterien ausgewählt werden - ggf. anpassen
With wksSelect
.Activate
.Range("A40:A45").Select 'bleibt das fix? oder ändert sich dass ständig? - wenn _
variabel, dann diese Zeile weglassen - wenn Fix,dann sollte man etwas _
anders programmieren
Set rngFilter = Selection
.Range("M5").Resize(20, 1).ClearContents 'Alte kriterien in M5:M25 löschen
rngFilter.Copy Destination:=.Range("M5")
Set rngFilter = ActiveSheet.Range("M5").Resize(rngFilter.Rows.Count, 1)
End With
' Auswahl der kopierten Merkmale im Filter für Regionen setzen
With Sheets("Original").PivotTables(1)
.RefreshTable
Set pvField = .PageFields("Region")
With pvField
'Filter im Feld zurücksetzen
.ClearAllFilters
If .EnableMultiplePageItems = False Then .EnableMultiplePageItems = True
For Each pvItem In .PivotItems
bolSelect = False
For Each rngZelle In rngFilter
If IsEmpty(rngZelle) And (pvItem = "(blank)" Or pvItem = "(Leer)") Then
bolSelect = True
Exit For
ElseIf rngZelle.Text = "" And pvItem = "" Then
bolSelect = True
Exit For
ElseIf rngZelle.Text = pvItem.Caption Then
bolSelect = True
Exit For
End If
Next
If bolSelect = False Then
pvItem.Visible = False
End If
Next
End With
.Parent.Activate
.TableRange2.Range("A1").Select
End With
End Sub

Anzeige
AW: Pivot-Tabellenbericht - Filtern aus Zellinhalten
14.08.2017 10:04:48
Stefan
Hallo Franz,
vielen Dank erstmal für deine Hilfe und Mühe!!
Bis hierher funktioniert der Code ganz gut:
Sub Kopieren_Filterelemente()
'Kopieren der Auswertung
Dim rngFilter As Range, rngZelle As Range
Dim pvField As PivotField, pvItem As PivotItem, bolSelect As Boolean
Dim wksSelect As Worksheet
Set wksSelect = Worksheets("Tabelle1") 'Name des Blattes in dem die Zellen mit den _
Filterkriterien ausgewählt werden - ggf. anpassen
With wksSelect
.Activate
.Range("A40:A45").Select 'bleibt das fix? oder ändert sich dass ständig? - wenn _
variabel, dann diese Zeile weglassen - wenn Fix,dann sollte man etwas _
anders programmieren
Set rngFilter = Selection
.Range("M5").Resize(20, 1).ClearContents 'Alte kriterien in M5:M25 löschen
rngFilter.Copy Destination:=.Range("M5")
Set rngFilter = ActiveSheet.Range("M5").Resize(rngFilter.Rows.Count, 1)
End With
Aber ab .RefreshTable bringt er mir einen Fehler.
' Auswahl der kopierten Merkmale im Filter für Regionen setzen
With Sheets("Original").PivotTables(1)
.RefreshTable
Set pvField = .PageFields("Region")
With pvField
'Filter im Feld zurücksetzen
.ClearAllFilters
If .EnableMultiplePageItems = False Then .EnableMultiplePageItems = True
For Each pvItem In .PivotItems
bolSelect = False
For Each rngZelle In rngFilter
If IsEmpty(rngZelle) And (pvItem = "(blank)" Or pvItem = "(Leer)") Then
bolSelect = True
Exit For
ElseIf rngZelle.Text = "" And pvItem = "" Then
bolSelect = True
Exit For
ElseIf rngZelle.Text = pvItem.Caption Then
bolSelect = True
Exit For
End If
Next
If bolSelect = False Then
pvItem.Visible = False
End If
Next
End With
.Parent.Activate
.TableRange2.Range("A1").Select
End With
End Sub

Ich weiß leider nicht warum, kannst Du mir dabei nochmal helfen?
Hängt es evtl. an weiteren Filtern die in der Pivot-Tabelle vorhanden sind?
Danke und Grüße
Stefan
Anzeige
AW: Pivot-Tabellenbericht - Filtern aus Zellinhalten
14.08.2017 12:19:08
fcs
Hallo Stefan,
zusätzliche Filter für andere Felder stören nicht.
Wenn das Makro an der Zeile
   .RefreshTable

abbricht, dann wurde die Eigenschaft "EnableRefresh" für den PivotCache des PivotBerichtes aus irgendeinem Grund bewusst auf False gesetzt. Standardwert ist True.
Das ist zumindest der einzige Grund den ich ohne Kentnis deiner Datei und Datenquelle herausfinden konnte. Im Menü "Pivottable Tools" --&gt "Optionen" --&gt "Bereich Daten" müsste dann auch die Schaltfläche "Aktuaklisieren" nicht aktiv sein.
Jetzt gibt es 2 Möglichkeiten:
1. Du löscht diese Zeile/wandelst sie in einen Kommentar um. Die Filter funktionieren dann immer noch.
2. Die Eigenschaft wird zur Aktualisierung vorübergehend auf True gesetzt.
Da musst du prüfen, ob das gewünscht/zulässig ist.
    With Sheets("Original").PivotTables(1)
Dim StatusPivotCache As Boolean
StatusPivotCache = .PivotCache.EnableRefresh
If StatusPivotCache = False Then .PivotCache.EnableRefresh = True
.RefreshTable
If .PivotCache.EnableRefresh  StatusPivotCache Then _
.PivotCache.EnableRefresh = StatusPivotCache
Set pvField = .PageFields("Region")
Gruß
Franz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige