2013-03-21 28 views
1

正如標題所示,我試圖禁用或使對方過濾器默認爲「全部」(如果選擇了另一個)。有條件的數據透視表過濾(如果其中一個被選中,則禁用另一個)

比如我有一個數據透視表有兩個過濾器 - 「周」和「月」

如果有人選擇在本週過濾器的值,我想每月過濾器默認爲「(全部)」和反之亦然。

很簡單,但我不知道如何攻擊這個(VBA或公式)以及代碼。

謝謝你們!

回答

0

不幸的是,沒有任何事件會跟蹤可轉換的字段更改。因此我的想法如下。 步驟1.將地方公共變量:

Public tmpM As Boolean 
Public tmpW As Boolean 

步驟2.在片狀模塊,其中數據透視表被放置把下面的代碼:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) 
On Error GoTo ErrorHandler 
Application.EnableEvents = False 

If Target.PivotFields("week").AllItemsVisible = False And tmpW = True Then 
    Target.PivotFields("month").ClearAllFilters 
End If 
If Target.PivotFields("month").AllItemsVisible = False And tmpM = True Then 
    Target.PivotFields("week").ClearAllFilters 
End If 
tmpM = Target.PivotFields("month").AllItemsVisible 
tmpW = Target.PivotFields("week").AllItemsVisible 

Application.EnableEvents = True 

Exit Sub 
ErrorHandler: 
Application.EnableEvents = True 
End Sub 

它正常工作與我的示例數據。

編輯:上面的代碼中的錯誤處理。

+0

非常感謝你。無論如何,我可以參考細胞而不是「星期」或「月」嗎?因爲這個值將根據選擇而改變。 – gfuller40 2013-03-21 14:59:06

+0

不,因爲我們無法讀取您更改過濾器的單元格。但你可以通過它們在表格結構中的位置來讀取樞軸區域。如果您在行方向上總是有兩個字段,則可以傳遞此信息。 – 2013-03-21 15:01:46

+0

我們可以做類似 如果Target.PivotFields <>(「(all)」) 甚至像範圍如果Target.PivotFields(「一月」,「二月」) – gfuller40 2013-03-21 16:31:06

相關問題