1
正如標題所示,我試圖禁用或使對方過濾器默認爲「全部」(如果選擇了另一個)。有條件的數據透視表過濾(如果其中一個被選中,則禁用另一個)
比如我有一個數據透視表有兩個過濾器 - 「周」和「月」
如果有人選擇在本週過濾器的值,我想每月過濾器默認爲「(全部)」和反之亦然。
很簡單,但我不知道如何攻擊這個(VBA或公式)以及代碼。
謝謝你們!
正如標題所示,我試圖禁用或使對方過濾器默認爲「全部」(如果選擇了另一個)。有條件的數據透視表過濾(如果其中一個被選中,則禁用另一個)
比如我有一個數據透視表有兩個過濾器 - 「周」和「月」
如果有人選擇在本週過濾器的值,我想每月過濾器默認爲「(全部)」和反之亦然。
很簡單,但我不知道如何攻擊這個(VBA或公式)以及代碼。
謝謝你們!
不幸的是,沒有任何事件會跟蹤可轉換的字段更改。因此我的想法如下。 步驟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
它正常工作與我的示例數據。
編輯:上面的代碼中的錯誤處理。
非常感謝你。無論如何,我可以參考細胞而不是「星期」或「月」嗎?因爲這個值將根據選擇而改變。 – gfuller40 2013-03-21 14:59:06
不,因爲我們無法讀取您更改過濾器的單元格。但你可以通過它們在表格結構中的位置來讀取樞軸區域。如果您在行方向上總是有兩個字段,則可以傳遞此信息。 – 2013-03-21 15:01:46
我們可以做類似 如果Target.PivotFields <>(「(all)」) 甚至像範圍如果Target.PivotFields(「一月」,「二月」) – gfuller40 2013-03-21 16:31:06