2017-12-01 6 views
0

"EX"シートにピボットテーブルがあります。ピボットの "Report Filter"フィールドには、200カ国を含む "国コード"があります。私は、InputBoxを使用して、そのフィルタから1つ以上の国を(目に見えないものにする)削除したいと思います。私は以下のコードを使用し、それは動作していません。 "If InStr"行には到着しません。私は次のことをテストしてみたし、動作しているようです複数のピボットアイテムをExcel VBAで非表示にする方法

Sub Removecountries() 

Dim str1 As Variant 
Dim Data As Variant 
Dim ws As Worksheet 

Set ws = Sheets("Ex") 
str1 = Application.InputBox("Enter the Country - comma separated") 

If str1 = False Then 
    MsgBox "Please Enter one Country", , "Filter Country" 
Exit Sub 

Else 

If InStr(1, str1, ",") > 0 Then 
Data = Split(str1, ",") 
With ws.PivotTables("RemoveTable").PivotFields("Country Code").PivotItems(Data(0)).Visible = False 
End With 
End If 

End If 
End Sub 
+0

入力ボックスのユーザー入力の例を教えてください。私はカンマ区切りがある理由について混乱しています。 – QHarr

+0

@QHarrはい。入力ボックスにFR、GB、DEのような国コードをコンマで区切って入力します。 – Deepak

+1

あなたのコードには*何が起こっていますか? – Rory

答えて

1

、問題はあなたが入力ボックスに1項目のみを入力したときのようだ私を助ける:(あなたは「ws.PivotTableを編集してくださいしようとする前に、 "という名前を付けました)

Sub Removecountries() 

Dim str1 As Variant 
Dim Data As Variant 
Dim ws As Worksheet 

Set ws = Sheets("Ex") 
str1 = Application.InputBox("Enter the Country - comma separated") 

If str1 = False Then 
    MsgBox "Please Enter one Country", , "Filter Country" 
Exit Sub 

Else 
ws.PivotTables("PivotTable1").PivotFields("CountryCode").ClearAllFilters 
If InStr(1, str1, ",") > 0 Then 
Data = Split(str1, ",") 
For i = LBound(Data) To UBound(Data) 
ws.PivotTables("PivotTable1").PivotFields("CountryCode").PivotItems(Data(i)).Visible = False 
Next i 
Else 
ws.PivotTables("PivotTable1").PivotFields("CountryCode").PivotItems(str1).Visible = False 
End If 

End If 
End Sub 
+0

ありがとうございます。ほぼ仕事。しかし、私が2回目のプログラムを実行しているとき、以前に適用されたフィルタは実行されません。リセットしてから入力ボックスを取得する必要があります。どうすればいいですか – Deepak

+0

あなたのコメントを反映するようにコードを更新しました。これは今のところできるはずです。If InStrの上に行を追加すると、フィルタをクリアしてから再び適用します。 – Xabier

+0

ありがとうございます@xabier – Deepak

関連する問題