Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1800to1804
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
Pivot-Tabelle über Textbox filtern
19.12.2020 09:47:53
Peter
Hallo zusammen,
Ich möchte gerne das Feld "Stadt" in der Pivottabelle durch die Eingabe in der Textbox filtern (und zwar "live", also "filter-as-you-type").
Mit einer Tabelle funktioniert das schon (s. Sheet "Tabelle"). Wie lautet der Code für das Filtern einer Pivot-Tabelle?
Für eure Hilfe und Tipps bin ich sehr dankbar!
https://www.herber.de/bbs/user/142437.xlsm
Beste Grüße
Peter

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

Betreff
Datum
Anwender
Anzeige
AW: Pivot-Tabelle über Textbox filtern
19.12.2020 20:56:30
fcs
Hallo Peter,
für ein Seitenfeld ist das Makro relativ aufwendig, da die Filterwerte einzeln gesetzt werden müssen.
Einfacher wird es, wenn man das Feld im Zeilenbereich anordnet.
Ich hab in deiner Datei beide Varianten eingebaut.
Wichtig ist auch, dass man eine Option setzt, die verhindert, das alte "Karteileichen" im
Tabellenbericht gesammelt werden - siehe Datei.
https://www.herber.de/bbs/user/142457.xlsm
LG
Franz
AW: Pivot-Tabelle über Textbox filtern
19.12.2020 21:50:01
Peter
Hallo Franz,
danke dir vielmals. Die Variante mit dem Zeilenbereich gefällt mir sogar deutlich besser! Perfekt!
Besten Dank nochmal und dir schöne Feiertage! Bleib gesund!
Gruß
Peter
Anzeige
AW: Pivot-Tabelle über Textbox filtern
19.12.2020 22:14:12
Yal
Hallo Peter,
Menno! fcs hat gepostet, während ich meine Version debuggen musste.
Ich poste trotzdem:
Ich so ergänzt, dass
_ eine Zeichenfolge allein als "*(zeichenfolge)*" interpretiert wird
_ "*xxx*" ebenso
_ "xxx*" --> fängt mit xxx
_ "*xxx" --> endet mit xxx
_ ist die Zeichenfolge nicht vorhanden, wird "alles" gezeigt
Die Anzeige in Finally ist nur Debugging. nicht vergessen rauszumachen.
Gute Test-Kandidat: br, br*, bre, bre*, rg, erg, urg, *rg, *erg, *urg
Viel Erfolg damit
Yal
Dim PF As PivotField
Private Sub TextBox1_Change()
Dim PI As PivotItem
Dim CompText As String
Dim CompTyp As String
' Debug: Anzeige leeren
On Error Resume Next:
' Ende Debug
On Error GoTo Catch
Try:
Application.EnableEvents = False
Application.ScreenUpdating = False
Set PF = ActiveSheet.PivotTables("PivotTable1").PivotFields("Stadt")
CompText = LCase(Trim([B3]))
PF.ClearAllFilters
If CompText = "" Or CompText = "*" Then
Alle_setzen
Else
PF.EnableMultiplePageItems = True
If Left(CompText, 1) = "*" Then CompTyp = "EndeVergleich"
If Right(CompText, 1) = "*" Then CompTyp = CompTyp & "AnfangVergleich"
CompText = Replace(CompText, "*", "")
Select Case CompTyp
Case "EndeVergleich"
For Each PI In PF.PivotItems: PI.Visible = (LCase(Right(PI.Caption, Len(CompText))) = _
CompText): Next
Case "AnfangVergleich"
For Each PI In PF.PivotItems: PI.Visible = (LCase(Left(PI.Caption, Len(CompText))) = _
CompText): Next
Case Else
For Each PI In PF.PivotItems: PI.Visible = (InStr(1, PI.Caption, CompText,  _
vbTextCompare) > 0): Next
End Select
End If
GoTo Finally
Catch:
Select Case Err.Number
Case 1004: Alle_setzen
Case Else: Debug.Print Err.Number, Err.Description
End Select
Finally:
' Debug: Anzeige der Treffer
Anzeigen
' Ende Debug
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Alle_setzen()
PF.ClearAllFilters
PF.EnableMultiplePageItems = False
PF.CurrentPage = "(All)"
End Sub
Sub Anzeigen()
Dim PI As PivotItem
On Error Resume Next
Worksheets("Pivot").Range("E13").CurrentRegion.ClearContents
For Each PI In PF.PivotItems
If PI.Visible Then
Worksheets("Pivot").Range("E13").Offset(i, 0) = PI.Caption
i = i + 1
End If
Next
End Sub

Anzeige
AW: Pivot-Tabelle über Textbox filtern
19.12.2020 22:52:29
Yal
Hmm...
Ich habe mich vielleicht verlesen.
Wenn es nur darum geht, der Anfang zu prüfen, wäre folgendes das kürzeste:
Private Sub TextBox1_Change()
Dim PI As PivotItem
Dim PF As PivotField
Set PF = Me.PivotTables(1).PivotFields("Stadt")
For Each PI In PF.PivotItems
If LCase(Left(PI.Caption, Len([B3]))) = LCase([B3]) Then
PF.ClearAllFilters
PF.EnableMultiplePageItems = True
For Each PI In PF.PivotItems
PI.Visible = (LCase(Left(PI.Caption, Len([B3]))) = LCase([B3]))
Next
Exit For
End If
Next
End Sub
Events und Screenupdating sollten trozdem kurzeitig augesetzt werden, sonst sind es jedesmals ca. 3. Sek. Das wäre kein "Live Typing".
VG
Yal
Anzeige
AW: Pivot-Tabelle über Textbox filtern
20.12.2020 10:17:57
Peter
Hallo Yal,
vielen Dank für deine Antwort. Funktioniert bei mir leider nicht. Den Code habe ich im Tabellenblatt eingfügt, aber es kommt die Fehlermeldung "Fehler beim Kompilieren. For-Steuervariable wird bereits verwendet", markiert ist das zweite "For Each PI In". Hast du eine Idee?
Gruß
Peter
AW: Pivot-Tabelle über Textbox filtern
21.12.2020 01:09:11
Yal
Hallo Peter,
mein Lösungsweg wäre: ich mache mich gedanken, was "For-Steuervariable wird bereits verwendet" bedeuten könnte. Dann würde schauen, wo diese For liegen. Dann schauen welche Steuervariable sie verwenden.
Dann würde ich entdecken, dass es 2 For-Schleife ineinander gibt. Daher dürfen sie nicht dieselbe "PI" verwenden. Dann würde ich eine separate Variable "PI2" einführen. Gleicher Typ wie PI.
Dann würde ich diese Variable in die innere Schleife anstatt PI einbauen (nur 3 Stellen anzupassen).
Ich gebe dir kein fertiges Coding, das bekommst Du auch so hin. Dann darfst Du zurecht das Gefühl haben, dass Du etwas kannst.
Viel Erfolg
Yal
Anzeige

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige