i got the below code from here: Looping through report filters to change visibility doesn't work where the solution is marked as working. After modifying according to my need, it is like this:
With pt.PivotFields(6)
.ClearAllFilters
If .PivotItems.Count > 0 Then
'goofy but necessary
Set firstPi = .PivotItems(1)
For Each pi In .PivotItems
If firstPi.Visible = False Then
firstPi.Visible = True
End If
'Don't loop through firstPi
If pi.Value <> firstPi.Value Then
itemValue = pt.GetPivotData("[Measures].[Nr of Cancelled]", "[Characteristics].[Reason]", pi.Name).Value
rw = rw + 1
nwSheet.Cells(rw, 1).Value = pi.Name
nwSheet.Cells(rw, 2).Value = pi.Visible
If itemValue < 2000 Then
If pi.Visible = True Then
pi.Visible = False 'Error here
End If
Else
MsgBox pi.Value
If pi.Visible = False Then
pi.Visible = True 'Error here
End If
End If
End If
Next
'Finally perform the check on the first pivot item
If firstPi > 2000 Then
firstPi.Visible = True
Else
firstPi.Visible = False
End If
End If
End With
I see that the whole code is working fine and I'm facing error only the lines pi.Visible = True
or pi.Visible = False
I'm not sure where I've done wrong for the code not to work.
When I was searching internet for the soltuion, I came across this link: https://support.microsoft.com/en-us/kb/114822 where MS mentioned that Only contiguous items in a PivotTable Field can be hidden. Does that mean that items in my table are not contiguous? Can anyone help me? I'm lost here.
I didn't find any solution for the Error. But I found another way to achieve the task. I used array to store all the Items to hide and Items to be visible so that I can call either HiddenItemsList or VisibleItemsList:
For Each pvtitem In pt.PivotFields(6).PivotItems
On Error GoTo skipreason
itemValue = pt.GetPivotData("[Measures].[Cancelled]", "[Characteristics].[Reason]", pvtitem.Name).Value
If itemValue < 2000 Then
hiddenReasons(hiddenCount) = pvtitem.Name
hiddenCount = hiddenCount + 1
Else
visibleReasons(visibleCount) = pvtitem.Name
visibleCount = visibleCount + 1
End If
Sheets("Cancels").PivotTables("Cancels").PivotFields( _
"[Characteristics].[Reason].[Reason]" _
).VisibleItemsList = Array(visibleReasons())