2016-08-01 43 views
1

Ich verwende den folgenden Code, um ein Pivot-Feld zu durchlaufen, um die Pivot-Elemente zu erhalten, die sichtbar sind. Aber die pivotitem.count gibt eine 0, wenn das Pivot-Feld in Row Label ist Wenn ich dieses Pivot-Feld zu Spalte Label verschieben, funktioniert der Code gut. Aber ich BENÖTIGE dieses Feld, um auf dem Reihenlabel zu bleiben.Die Liste sichtbarer Elemente aus einem Pivot-Feld mit VBA abrufen

Gibt es irgendwelche Arbeit für mein Problem?

Dim pt As PivotTable 
Dim pf As PivotField 
Dim pvtitem As PivotItem 

Set nwSheet = Worksheets.Add 
nwSheet.Activate 
rw = 0 

Set pt = Sheets("Reasons").PivotTables("PivotFields") 
Set pf = pt.PivotFields("[Characteristics].[Reason].[Reason]") 

With pf 
    For i = 0 To .PivotItems.Count 
     rw = rw + 1 
     nwSheet.Cells(rw, 1).Value = .PivotItems.Count 
    Next i 
End With 

Antwort

1

Iterieren auf RowFields kann explizit erhalten, den Griff sichtbar Pivot Artikel in Zeilenfelder. Bitte sehen, ob dies dem Zweck dient:

Set pt = Sheets("Reasons").PivotTables("PivotFields") 
    Dim pf As PivotField 
    For Each pf In pt.RowFields 
      MsgBox pf.Name & " : " & pf.VisibleItems.Count 
    Next 

auf Berichtsfilter iterieren:

Dim pt As PivotTable 
Dim pFilter As PivotFilter 
Dim pFilters As PivotFilters 
Dim pF As PivotField 

Set pt = Sheets("Reasons").PivotTables("PivotFields") 
'Set the first RowField as the PivotField 
Set pF = pt.RowFields(1) 

'Remove previous filters 
pF.ClearAllFilters 

'Assuming we have a RowField as 'Quarter' and DataField as 'Sum of Sale', 
'we can apply a new 'ValueIsLessThan' filter for a Sum of Sale value of 12000 

pt.PivotFields("Quarter").PivotFilters.Add Type:=xlValueIsLessThan, _ 
DataField:=pt.PivotFields("Sum of Sale"), Value1:=12000 

Set pFilters = pt.PivotFields("Quarter").PivotFilters 

For Each pFilter In pFilters 
    MsgBox "Filter Applied On: " & pFilter.PivotField.Name & " -- Filtered values for less than : " & pFilter.Value1 
Next 
+0

Nope. Das funktioniert nicht. For-Schleife wird gerade übersprungen. Also ich nehme an, es ist nicht in der Lage, die Pivot-Felder zu holen – Pramod

+0

Es funktionierte so: Für jeden pi In pt.RowFields (1) .PivotItems – Pramod

+0

Ich versuche auch, die Felder im Berichtsfilter mit "pt.Filter (1) .PivotItems "aber das funktioniert nicht. Haben Sie eine Idee, wie Sie mit Pivot-Feldern im Berichtsfilter arbeiten? – Pramod