Excel - Pivottabellen-Filter verknüpfen

Hallo liebe Leute,
Ich bin absoluter Neuling, was die VBA-Programmierung angeht und werde wohl auch nicht die Zeit dazu haben, mich da in nächster Zeit intensiver einzulernen.

Möglicherweise könnt ihr mir ja weiterhelfen, ich wäre auf jeden Fall unglaublich dankbar.
Folgendes: Ich will in meiner Exceltabelle die Filter innerhalb eines Arbeitsblattes verknüpfen. Sprich änder ich das eine springt, das andere automatisch auf den gleichen Wert bzw. andersrum.

Das hat bisweilen mit zusammengeklautem Code aus diverser anderer Foren ganz gut geklappt. Das Problem ist nur, dass dieser Code auch alle anderen Arbeitsblätter mit Pivottabellen berücksichtigt, die wiederrum Fehler versuchen. Deswegen meine Frage: Ist es möglich folgenden Code ohne großen Aufwand entweder nur auf mein Arbeitsblatt „Analyse“ zuzuschneiden bzw. allgemein zubelassen und stattdessen mein Arbeitsplatt „Trend“ davon auszunehmen. Ich hoffe ihr könnt mir helfen. Liebe Grüße. Stephan.

Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
Dim wS As Worksheet
Dim pt As PivotTable
Dim pf As PivotField

On Error GoTo ErrorHandler
Application.EnableEvents = False
For Each wS In ThisWorkbook.Worksheets
For Each pt In wS.PivotTables
If pt.Name Target.Name Then
For Each pf In Target.PageFields
pt.PivotFields(pf.Value).CurrentPage = _
Target.PivotFields(pf.Value).CurrentPage.Value
Next pf
End If
Next pt
Next wS

ResumePoint:
Application.EnableEvents = True
Exit Sub

ErrorHandler:
Application.Goto pt.TableRange1
MsgBox „Diese PT hat einen Fehler verursacht“
Resume ResumePoint:
End Sub

Hallo!

Also wenn es nur auf „Analyse“ ausgeführt werden soll, dann füge folgende Zeile vor dem
On Error GoTo ErrorHandler
ein

if lcase(activesheet.name) „analyse“ then exit sub

oder wenn es auf jedem blatt ausgeführt werden, AUßER auf „Trend“, dann füge stattdessen diese zeile ein:

if lcase(activesheet.name) = „trend“ then exit sub

gruß
ralf

Danke schonmal für die Mühe. Jetzt verursachen die Tabellen in „Trend“ beim öffnen der Datei keine Fehlermeldung mehr. Ändere ich dann aber die Filter in „Analyse“ springt die Ansicht wieder zur PT in „Trend“ und es erscheitn die Meldung, dass diese PT einen Fehler verursacht. Mein Code steht übrigens bei „Diese Arbeitsmappe“.

Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
Dim wS As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
If LCase(ActiveSheet.Name) „analyse“ Then Exit Sub

On Error GoTo ErrorHandler
Application.EnableEvents = False
For Each wS In ThisWorkbook.Worksheets
For Each pt In wS.PivotTables
If pt.Name Target.Name Then
For Each pf In Target.PageFields
pt.PivotFields(pf.Value).CurrentPage = _
Target.PivotFields(pf.Value).CurrentPage.Value
Next pf
End If
Next pt
Next wS

ResumePoint:
Application.EnableEvents = True
Exit Sub

ErrorHandler:
Application.Goto pt.TableRange1
MsgBox „Diese PT hat einen Fehler verursacht“
Resume ResumePoint:
End Sub

Ich will in meiner Exceltabelle die Filter
innerhalb eines Arbeitsblattes verknüpfen.

Hallo Stephan,

da ich mir die ganze Sache nicht so richtig vorstellen kann, kann ich dir hier nicht weiterhelfen.

LG Johannes E.

hi!

ja, da war ich ein wenig zu schnell.
bevor ich das korrigiere, was soll jetzt genau passieren.
1.) wenn ein filter ausschließlich auf „analyse“ betätigt wird, soll das makro ausgeführt werden?
oder
2.) es soll auf jedem tabellenblatt das makro ausgeführt werden, außer auf trend"?

sorry keine Ahnung

Letztenendes soll das Makro einfach nur in „Analyse“ wirken. Also treffen beide Aussagen zu. Weiß nur einfach nicht, wie ich das hinbekomme. Sorry für die Unfähigkeit :wink: lg.

Ändere den Hauptblock wie folgt:

Application.EnableEvents = False
wS = ThisWorkbook.Worksheets("Analyse")
For Each pt In wS.PivotTables
 If pt.Name Target.Name Then
 For Each pf In Target.PageFields
 pt.PivotFields(pf.Value).CurrentPage = \_
 Target.PivotFields(pf.Value).CurrentPage.Value
 Next pf
 End If
Next pt

Ok!

Wenn es nur das Blatt „Analyse“ betrifft, lösche das Makro unter „Arbeitsmappe“ und kopiere nachfolgendes hinter das Blatt „Analyse“

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim wS As Worksheet
Dim pt As PivotTable
Dim pf As PivotField

'If LCase(ActiveSheet.Name) „analyse“ Then Exit Sub

On Error GoTo ErrorHandler
Application.EnableEvents = False
'For Each wS In ThisWorkbook.Worksheets
For Each pt In ActiveSheet.PivotTables
If pt.Name Target.Name Then
For Each pf In Target.PageFields
pt.PivotFields(pf.Value).CurrentPage = _
Target.PivotFields(pf.Value).CurrentPage.Value
Next pf
End If
Next pt
'Next wS

ResumePoint:
Application.EnableEvents = True
Exit Sub

ErrorHandler:
Application.Goto pt.TableRange1
MsgBox „Diese PT hat einen Fehler verursacht“
Resume ResumePoint:

End Sub

1 Like

Alles klar. Funktioniert. Viele Dank auch :smile:

Hallo Stephan,

per select Case kannst du die Verarbeitung der Tabellenblätter über den Blatt-Namen steuern.

Die Fehlerbehandlung kann man damit auch flexibler gestalten, indem ggf. auf bestimmte Fehlernummern geprüft wird.

Gruß
Franz

Private Sub Workbook\_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
 Dim wS As Worksheet
 Dim pt As PivotTable
 Dim pf As PivotField

 On Error GoTo ErrorHandler
 Application.EnableEvents = False
 For Each wS In ThisWorkbook.Worksheets
 Select Case wS.Name
 Case "Trend", "TabelleXYZ"
 'in diesen Tabellen die Pivottabs nicht anpassen
 Case Else
 For Each pt In wS.PivotTables
 If pt.Name Target.Name Then
 For Each pf In Target.PageFields
 pt.PivotFields(pf.Value).CurrentPage = \_
 Target.PivotFields(pf.Value).CurrentPage.Value
 Next pf
 End If
 Next pt
 End Select
 Next wS

 
ErrorHandler:
 With Err
 Select Case .Number
 Case 0 'Alles ok
 Case Else
 Application.Goto pt.TableRange1
 MsgBox "Diese PT hat einen Fehler verursacht"
 End Select
 End With
 Application.EnableEvents = True
End Sub

Hallo Herr Sonderbar,
ich weiß nicht, was Sie mit diesem Filterwechsel bezwecken wollen und dann noch unter VBA.
Das geht doch auch ganz nett auf Tabellenebene.
Wenn schon VBA, sollten Sie sich passende Fachlektüre besorgen und Zeit investieren. Ich musste das auch.
Leider kann ich mit Filterbedingungen unter VBA nur über Suchbedingungen die Filter setzen, oder deaktivieren.
Ihr Beispiel ist etwas sonderbar.

mfg
Softoldi

Hallo Stephan

Leider kann ich dir da auf der Schnelle nicht weiter helfen. Mir fehlt aus Beruflichen Gründen die Zeit.

Gruß
Michael

Hallo Stephan,

in deinen Code steht die Zeile ‚For Each wS In ThisWorkbook.Worksheets‘ , dieses durchläuft ALLE Arbeitsblätter in deinen Code und bearbeitet bzw. ändert auch diese.

Folgende Zeilen bitte löschen:
Dim wS As Worksheet
For Each wS In ThisWorkbook.Worksheets
Next wS

Folgende Zeile ändern:
For Each pt In wS.PivotTables
— in —
For Each pt In ThisWorkbook.Worksheets(„Analyse“).PivotTables

Somit sollte es klappen, damit wird nur das Arbeitsblatt „Analyse“ bearbeitet.

Andreas

Hallo,

tut mir leid, da kann ich leider nicht helfen.

Gruß
Sabine