Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1396to1400
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

Berichtsfilter durch Zellenwert

Berichtsfilter durch Zellenwert
12.12.2014 10:26:42
Exembrem
Guten Morgen,
ich versuche meine Pivot Tabellen "Umsatz", "Personal",und "Materialien" im Tabellenblatt "Diagramme-Basis" über einen manuell eingegeben Zellinhalt auf dem Blatt "Übersicht" filtern zu lassen (Zelle A1=Wert des Berichtsfilters). Die Pivots haben einen Berichtsfilter namens "Bezeichnung", der Filter ist für alle Pivots verbunden. Gefiltert werden soll aber nur - wenn auch wirklich ein Wert in Zelle A1 eingegeben ist.
Ich habe einen VBA-Code hier im Forum gefunden und wollte diesen auf meine Situation abändern, bekomme allerdings eine Fehlermeldung.
VBA-Code im Blatt Diagramme-Basis:
Private Sub Worksheet_Change(ByVal Target As Range)
Call PivAendern
End Sub
Kann mir bitte jemand helfen, das ganze umzuändern?
VBA Code im Modul1:
Sub PivAendern()
With Sheets("Diagramme-Basis").PivotTables(1)
.PivotFields("Bezeichnung").CurrentPage = Sheets("Übersicht").[A1].Value
.PivotCache.Refresh
End With
End Sub

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Berichtsfilter durch Zellenwert
15.12.2014 08:21:19
fcs
Hallo Exembrem,
mit folgenden Anpassungen sollte es passen.
Wichtig ist die Prüfung, ob die einegebene Bezeichnung auch unter den Berichtsitems vorhanden ist, sonst gibt es Daten-Chaos.
Gruß
Franz
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False, xlA1) = "A1" Then
If Target  "" Then
Call PivAendern(Bezeichnung:=Target.Value)
End If
End If
End Sub
'VBA Code im Modul1:
Sub PivAendern(Bezeichnung As Variant)
Dim intPv As Integer, pvItem As PivotItem
For intPv = 1 To 3
With Sheets("Diagramme-Basis").PivotTables(intPv)
.RefreshTable
For Each pvItem In .PageFields("Bezeichnung").PivotItems
'Wenn Bezeichnung in den Berichtsitems vorhanden, dann Berichtsfilter setzen
If pvItem.Name = Bezeichnung Then
.PageFields("Bezeichnung").CurrentPage = Bezeichnung
Exit For
End If
Next
If pvItem Is Nothing Then
MsgBox "Eingegebener Wert ist als ""Bezeichnung"" nicht vorhanden!"
'                Exit For
End If
End With
Next
End Sub

Anzeige
AW: Berichtsfilter durch Zellenwert
15.12.2014 08:49:09
Exembrem
Guten Morgen und vielen Dank für die Antwort,
leider bringt er mir hier auch wieder einen Fehler:
For Each pvItem In .PageFields("Bezeichnung").PivotItems
Die PageFields-Eigenschaft des PivotTable Objeketes kann nicht zugeordnet werden, was bedeuted das?

AW: Berichtsfilter durch Zellenwert
15.12.2014 10:17:12
fcs
Hallo,
das bedeutet wahrscheinlich, dass in einer der 3 Pivot-Tabellen kein Berichtsfeld mit Name "Bezeichnung" vorhanden ist.
Funktioniert es denn, wenn du in Zeile
For intPv = 1 To 3
die 3 durch eine 1 ersetzt?
Dann würde nur die 1. Pivottabelle angepasst. Evtl. werden dann ja auch die verbunden Pivots mit angepasst.
Ich hatte mit 3 Pivot-Tabs getestet, die die gleiche Datenquelle benutzen, aber unterschiedliche Felder auswerten.
Gruß
Franz
Gruß
Franz

Anzeige
AW: Berichtsfilter durch Zellenwert
15.12.2014 10:40:11
Exembrem
Ok, habe das Problem gefunden, lag an meiner eigenen Dummheit: Ich hatte noch eine kleine Pivot die mir Durchschnittswerte angibt im Tabellenblatt, die soll deshalb nicht gefiltert werden und ist auch nicht verknüpft. Muss ich die aus dem Tabellenblatt rausnehmen oder kann ich im Code die Pivots mit ihren Namen angeben, die es filtern soll?
Gruß und vielen Dank schonmal!!

AW: Berichtsfilter durch Zellenwert
15.12.2014 10:56:32
Exembrem
Noch ein kleines Problem, mit der funktionierenden Variante (Zelle A1 = Zelle XY auf Blatt X, wenn sich die Zelle XY verändert, verändert sich Zelle 1 auf dem Blatt Diagramme-Basis auch, ich muss aber erst noch einmal reinklicken und bestätigen dass die Pivot aktualisiert :/

Anzeige
AW: Berichtsfilter durch Zellenwert
15.12.2014 17:11:40
fcs
Hallo,
über eine Prüfung kannst du die 4. Tabelle aus der Aktion "Filter setzen" heraus lassen. Du musst sie nicht aus dem Blatt löschen.
Das Change-Ereignis reagiert nur wenn in Zellen Werte eingegeben/gelöscht werden, nicht wenn sich Formelergebnisse ändern.
Du muss also das Makro unter dem Tabellenblatt einfügen, in dem die Eingaben gemacht werden.
Gruß
Franz
'Makro unter Tabelle X
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False, xlA1) = "XY333" Then 'Zelladresse anpassen!!!
If Target  "" Then
Call PivAendern(Bezeichnung:=Worksheets("Diagramme-Basis").Range("A1").Value)
End If
End If
End Sub
'VBA Code im Modul1:
Sub PivAendern(Bezeichnung As Variant)
Dim pvTab As PivotTable, pvItem As PivotItem
For Each pvTab In Sheets("Diagramme-Basis").PivotTables
Select Case pvTab.Name
Case "PivotNr4" 'Name(n) der Pivot(s) die nicht bearbeitet werden sollen
'do nothing
Case Else
With pvTab
.RefreshTable
For Each pvItem In .PageFields("Bezeichnung").PivotItems
'Wenn Bezeichnung in den Berichtsitems vorhanden, dann Berichtsfilter  _
setzen
If pvItem.Name = Bezeichnung Then
.PageFields("Bezeichnung").CurrentPage = Bezeichnung
Exit For
End If
Next
If pvItem Is Nothing Then
MsgBox "Eingegebener Wert ist als ""Bezeichnung"" nicht vorhanden!"
'                Exit For
End If
End With
End Select
Next pvTab
End Sub

Anzeige
AW: Berichtsfilter durch Zellenwert
16.12.2014 08:08:10
Exembrem
Ach das geht nicht.. Schade, habe in einem Dropdown alle auffälligen Werte vereint, die dort ausgewählt werden können, dann lässt sich das nicht so verknüpfen, die manuelle Eingabe muss erfolgen?
Aber vielen vielen Dank für die hilfreichen Antworten, haben mir sehr geholfen, auch wenn ich VBA nicht wirklich kann! :)

AW: Berichtsfilter durch Zellenwert
16.12.2014 09:25:02
Exembrem
Also,
ich habe ein Makro aufgenommen, dass die Zelle des Dropdowns in die Auswahlzelle einfügt und falls notwendig die Filter löscht, gefällt mir so ganz gut. Ich habe versucht das gleiche für die vierte Pivot "Bundesland" zu machen, wenn in der Tabelle XY in Zelle A2 dieser Wert eingegeben wird. Kann ich den Befehl PivAendern hier auch wieder benutzen? Und wie kann ich im Modul2 (oder auch ergänzend zum Modul1) den Befehl geben, dass nur die Pivot Bundesland auf diesen Wert in A2 gefiltert wird (Filter heisst ebenfalls Bundesland). Hoffe ich konnte das Problem erklären.

Anzeige
AW: Berichtsfilter durch Zellenwert
16.12.2014 08:36:08
Exembrem
Ich stör mal nochmal kurz wieder.. tut mir leid :D
Kann ich auch ein Ereignis schreiben, dass mir den Filter löscht, wenn der Wert aus der Eingabezelle gelöscht wird?
Gruß

AW: Berichtsfilter durch Zellenwert
16.12.2014 12:03:45
fcs
Hallo,
grundsätzlich ginge das, es ist aber besser mit einem Wert wie "(Alle)" zu arbeiten, um den Ablauf entsprechend zu steuern.
ich hab mal eine kleine Beispieldatei gebastelt in der die entsprechenden Makros eingerichtet sind.
Für die Aktualisierung einer einzelnen Pivottab hab ich ein separates Makro erstellt. Diese hat 3 Parameter (Pivottabelle, Feldname, Filterwert), so dass damit in beliebigen Pivottabellen ein Filter im Berichts gesetzt werden kann.
Auch die Auswahl per DropDownAuswahl (Datengültigkeitsprüfung) in einem anderen Blatt ist umgesetzt.
https://www.herber.de/bbs/user/94434.xlsm
Gruß
Franz

Anzeige
AW: Berichtsfilter durch Zellenwert
16.12.2014 14:15:35
Exembrem
Tut mir leid wenn ich das so sag, nachdem du dir soviel Mühe gegeben hast, ich hab das zwar probiert mit der Lösung, aber irgendwie steig ich nicht durch den Code und passt auch nicht zu meiner Datei.
Vielleicht könntest du mir ein letztes mal helfen, den vorigen Code von dir (der spitze ist!) zu ändern:
Code in Diagramme-Basis:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False, xlA1) = "A1" Then
If Target  "" Then
Call PivAendern(Kst:=Target.Value)
End If
End If
End Sub
'Dieser Code soll noch enthalten, dass er die Pivot "Bundesland" und dem Berichtsfilter "Bundesland" mit dem Wert filtert der in M13 ausgegeben wird (Dieser Wert wird sverweist von der Bezeichnung (die nun Kst heisst) die im 1. Schritt gefiltert wurde). Im Prinzip eigtl gleiches Vorgehen wie vorher, für mich als VBA-Neuling kann ich das aber nicht in den Code einbinden.
Modul 1:
Sub PivAendern(Kst As Variant)
Dim pvTab As PivotTable, pvItem As PivotItem
For Each pvTab In Sheets("Diagramme-Basis").PivotTables
Select Case pvTab.Name
Case "Kst" 'Name(n) der Pivot(s) die nicht bearbeitet werden sollen
'do nothing
Case Else
With pvTab
.RefreshTable
For Each pvItem In .PageFields("Kst").PivotItems
'Wenn Kst in den Berichtsitems vorhanden, dann Berichtsfilter _
setzen
If pvItem.Name = Kst Then
.PageFields("Kst").CurrentPage = Kst
Exit For
End If
Next
If pvItem Is Nothing Then
MsgBox "Eingegebener Wert ist als ""Kst"" nicht vorhanden!"
' Exit For
End If
End With
End Select
Next pvTab
End Sub 'Hier müsste denke ich der Code ja angepasst werden, dass er für die Pivot "Bundesland", für die du ja richtig gestellt hast, dass hier nicht gefiltert wird im 1. Schritt, nun nach der Zelle M13 im Diagramme-Basis Blatt gefiltert wird. Also eine Aktion ganz Abseits zur ersten.
Vielen Dank dir! Weiß gar nicht wie ich mich dankbar zeigen kann :-) Aber für dich ist das wahrscheinlich sehr leicht.
Gruß

Anzeige
AW: Berichtsfilter durch Zellenwert
16.12.2014 15:26:40
fcs
Hallo,
probier es mal so, dann sollte alles nach einer Änderung in A1 angepasst werden.
Gruß
Franz
Sub PivAendern(Kst As Variant)
Dim pvTab As PivotTable, pvItem As PivotItem
Dim varBundesland
For Each pvTab In Sheets("Diagramme-Basis").PivotTables
Select Case pvTab.Name
Case "Bundesland" 'Name(n) der Pivot(s) die nicht bearbeitet werden sollen
With Sheets("Diagramme-Basis").Range("M13")
.Calculate
varBundesland = .Value
End With
With pvTab
.RefreshTable
For Each pvItem In .PageFields("Bundesland").PivotItems
'Wenn Bundesland in den Berichtsitems vorhanden, dann Berichtsfilter _
setzen
If pvItem.Name = varBundesland Then
.PageFields("Bundesland").CurrentPage = varBundesland
Exit For
End If
Next
If pvItem Is Nothing Then
MsgBox "Eingegebener Wert ist als ""Kst"" nicht vorhanden!"
' Exit For
End If
End With
Case Else 'die anderen 3 Pivottabs mit "Kst" als Feld
With pvTab
.RefreshTable
For Each pvItem In .PageFields("Kst").PivotItems
'Wenn Kst in den Berichtsitems vorhanden, dann Berichtsfilter _
setzen
If pvItem.Name = Kst Then
.PageFields("Kst").CurrentPage = Kst
Exit For
End If
Next
If pvItem Is Nothing Then
MsgBox "Eingegebener Wert ist als ""Kst"" nicht vorhanden!"
' Exit For
End If
End With
End Select
Next pvTab
End Sub

Anzeige
AW: Berichtsfilter durch Zellenwert
16.12.2014 16:08:59
Exembrem
https://www.herber.de/bbs/user/94447.xlsm
Hat leider nicht funktioniert, aber vllt. bin ich ja zu doof dazu. Hier mal mein Beispiel im guten Maßstab abgebildet, mit dem Code den ich bisher hab.
Gruß

AW: Berichtsfilter durch Zellenwert
16.12.2014 16:36:14
fcs
Hallo,
ich hab es jetzt mal eingebaut.
Für die Pivot Bundesland gibt es ein separates Pivot-Anpassungsmakro.
https://www.herber.de/bbs/user/94448.xlsm
Gruß
Franz

AW: Berichtsfilter durch Zellenwert
17.12.2014 08:20:41
Exembrem
Gab zwar erst einen Fehler hier:
.PageFields("Bundesland").CurrentPage = varBL
aber nachdem ich den Filter der Bundesländer gelöscht habe, hat es funktioniert. Ich hoffe das bleibt so :D Vielen lieben Dank dir auf jedenfall! Hat mir wirklich sehr geholfen und einiges "automatisiert"!
Gruß
Michael

Anzeige
AW: Berichtsfilter durch Zellenwert
18.12.2014 10:06:23
Exembrem
Hallo Franz,
da du mit meinem Problem ja bestens vertraut bist, wollte ich dich fragen ob es basierend auf meiner Lösung möglich ist ein Druckmakro zu erstellen (PDF speichern mit name der Kst). Drucken sollte es natürlich alle Kst die im Dropdown angezeigt werden (im Dropdown Feld gibt es allerdings auch leere Felder, die sollen nicht gedruckt werden).
https://www.herber.de/bbs/user/94485.xlsm
Dazu habe ich die Datei ein bisschen an die Realität angepasst. Mit dem Makro Recorder komm ich eben nur so weit, dass ich die Kst im Dropdown auswähle, er den Druck durchführt, ich manuell abspeichern muss. Und das dann eben für jede einzelne...
Gruß
Michael

AW: Berichtsfilter durch Zellenwert
18.12.2014 21:30:42
fcs
Hallo Michael,
ich hab Ausgabe als PDF-Datei integriert. Dazu musste ich ein paar Dinge anpassen, näheres siehe Blatt Info. Um Probleme bei den Datenquellen der Pivots zu vermeiden hab ich die Datei in einer ZIP-Datei hochgeladen. Dann sollte nach dem Extrahieren der Datei alles passen.
https://www.herber.de/bbs/user/94496.zip
Gruß
Franz

AW: Berichtsfilter durch Zellenwert
18.12.2014 22:04:52
Hakula
Ah sehe schon, hab einiges durcheinandergebracht beim aufbauen und nicht drüber geschaut! Danke dir für deine Bemühungen ich probier's morgen gleich aus!

AW: Berichtsfilter durch Zellenwert
19.12.2014 10:40:01
Hakula
Hallo Franz,
Danke für die Hilfe! Es ist total genial geworden! (Für meine Begriffe 😃)
Kannst ich bei der Namensvergabe sagen dass er den Wert einer Zelle (Bsp. C13) zusätzlich wiedergibt?

AW: Berichtsfilter durch Zellenwert
19.12.2014 15:40:00
fcs
Hallo Michael,
wenn Vorgaben für den Namen der PDF-Datein variael aus Zellen übernehmen werden sollen, dann kannst du im folgenden Makro die Parameter strPDF_Name_1 und/oder strPDF_Name_2 oder auch den Pfad anpassen, indem du ihnen den Wert einer Zelle zuweist oder auch hinzufügst.
Sub PDF_Umsatzrueckgaengig()
Call prcPDF_Speichern(strBlattDaten:="Übersicht", _
strZelleKst:="S13", _
Pfad:=ActiveWorkbook.Path & "\", _
strName_PDF_1:="Umsatz_" & Worksheets("Übersicht").Range("C13").Text & "_", _
strName_PDF_2:=" " & Format(Date, "YYYY-MM-DD"), _
Spalte:=1, _
AktualisierungsMakro:="Dropdown_aktivieren_Umsatz")
End Sub

Ansonsten kannst du dir natürlich auch eine andere Methode überlegen, wie du den PDF-Namen festlegen willst, und die Parameter entsprechend anpassen. Du muss nur darauf achten, dass der Name eindeuig wird, denn der Speichervorgang überschreibt existierende PDF-Dateien gnadenlos.
Gruß
Franz

AW: Berichtsfilter durch Zellenwert
22.12.2014 11:40:28
Exembrem
Hallo Franz,
das hab ich eben probiert, das funktioniert auch bis auf einen kleinen Punkt wenn der Wert der Zelle C13 ändert sich ja, je nach Auswahl. Steht da jetzt z.B. "A" drin behält er bei jedem Druck das A, auch wenn die Zelle zwischenzeitlich auf B oder C wechselt.
Gruß,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige