2016-06-24 1 views
0
strTemp = ActiveSheet.PivotTables("BreakCon").PivotFields("Service Type").PivotItems("International Data") 
     If Err = 0 Then FieldExists = True Else FieldExists = False 
     If FieldExists = True Then 
      With ActiveSheet.PivotTables("BreakCon").PivotFields("Service Type") 
      .PivotItems("International Data").Visible = False 
      .PivotItems("Non Contracted").Visible = False 
     ElseIf FieldExists = False Then 
     With ActiveSheet.PivotTables("BreakCon").PivotFields("Service Type") 
      .PivotItems("Non Contracted").Visible = False 

     Else 
      MsgBox ("Error") 
     End If 

가끔씩 코드를 통과하는 데이터에 "국제 데이터"가 포함되는 경우가 있지만 간혹이 If 문을 추가하여 "국제 데이터"가 피벗 테이블에 있는지 확인하고 다음 if 문으로 이동하지 않습니다. 누구든지이 코드의 문제점을 볼 수 있습니까? 내가 아는 모든 방법을 시도했지만 벽돌 벽에 부딪혔다! 건배!IF 문 Excel VBA

+0

어느 라인이 오류의 원인은? – Jordan

답변

2

AFAIK를 수행하는 유일한 방법은 피벗 필드의 피벗 항목을 반복하여 원하는 항목이 있는지 확인하는 것입니다.

나는 위의 코드에서 On Error Resume을 사용하고 있다고 가정합니다. 문제를 해결하기 위해 다음과 같은 방법을 사용하는 것이 좋지만, 아래의 방법을 사용하면 VBA 기능을 사용하여 문제를 원활하게 처리 할 수 ​​있습니다.

은 아래를 참조하십시오 :

Dim pt as PivotTable 
Dim pf as PivotField 
Dim pi as PivotItem 

Set pt = Worksheet("mySheet").PivotTables("BreakCon") 
Set pf = pt.PivotFields("Service Type") 

For each pi in pf.PivotItems 

    If pi.Name = "International Data" Then 
     pf.PivotItems("International Data").Visible = False 
     Exit For 
    End If 

Next 

pf.PivotItems("Non Contracted").Visible = False 
+1

그 스콧을위한 건배, 예, 나는 처음 만났을 때이 문제를 해결하기 위해 임시적인 방법을 사용했지만 당신이 준 코드는 훌륭했습니다! – Crane92