2017-09-21 3 views
0

Ich versuche, eine Pivot-Tabellenspalte (GP#) aus einem Array zu filtern (in diesem Beispiel verkürzt).Pivot-Tabelle mit Werten in VBA filtern

Der Filter funktioniert, aber wenn ich auf eine Zahl (in diesem Fall 83292) erhalten, die nicht im Filter, die Excel mit dem Fehler abstürzt:

Laufzeitfehler 1004 Anwendung definiert oder Objekt -definierter Fehler

Gibt es eine Möglichkeit zu überprüfen, ob eine Nummer/ein Name usw. im Filter ist und ob sie dann zum Filtern gilt?

Mein Code:

vGP = Array("83041", "83327", "83292") 
ActiveSheet.PivotTables("PivotTable1").ManualUpdate = True 
With ActiveSheet.PivotTables("PivotTable1").PivotFields("GP#") 
    .PivotItems(1).Visible = True 

    ' below code ensure pivot table filter does not cause error by not having anything in the filter 

    For i = 2 To .PivotItems.Count 
     .PivotItems(i).Visible = False 
     If .PivotItems(i).Visible Then .PivotItems(i).Visible = False 
    Next i 

    ' goes through array and adds any value in array 
    For Each i In vGP 
     .PivotItems(i).Visible = True 
    Next i 
    On Error GoTo 0 

Kann jemand bitte sicherstellen helfen, dass die Werte im Array können auf den Filter und Werte im Array hinzugefügt werden, die nicht in der Pivot-Tabelle ist, werden ignoriert

+0

So scheint diese Frage bei https://stackoverflow.com/questions/45718045/pivotfields-multiple-filter/45726720#45726720 genau dasselbe wie die vorherige Frage zu fragen, dass ich schon mit einigen sehr beantwortet effizienter Code. – jeffreyweir

+0

Darüber hinaus hat Ihr Code oben mehrere Designfehler, von denen ich beide mit der ursprünglichen Antwort programmiert habe. Die Zeile "If .PivotItems (i) .Visible Then .PivotItems (i) .Visible = False" ist vollständig redundant, und die nächste Schleife muss in eine 'On Error Resume Next' gehüllt werden. Was ist der Sinn, wenn wir Ihre Fragen beantworten, wenn Sie die vorherige Antwort, die perfekt funktioniert, völlig ignorieren? – jeffreyweir

Antwort

0

Versuchen Sie den folgenden Code, um zu finden, ob ein bestimmtes Array-Element innerhalb der PivotField mit dem Namen GP# gefunden wird.

Dim PvtTbl As PivotTable 
Dim PvtFld As PivotField 
Dim MatchFound As Boolean, i As Long 

' set the Pivot Table 
Set PvtTbl = ActiveSheet.PivotTables("PivotTable1") 

' set the Pivot Field 
Set PvtFld = PvtTbl.PivotFields("GP#") 

MatchFound = False ' reset flag 
For i = 1 To PvtFld.PivotItems.Count ' loop through all pivot items 
    If PvtFld.PivotItems(i).Name = vGP(1) Then ' check if the second array element is found in one of the Pivot items 
     MatchFound = True ' raisw flag 
     Exit For 
    End If 
Next i 

If MatchFound Then 
    PvtFld.PivotItems(i).Visible = True ' apply filter if the array element found 
End If 
Verwandte Themen