2017-05-31 192 views
0

我有一個電子表格,查看組織的多個不同詳細信息。除了存在於所有數據集中的「costcentre」以外,所有字段在不同的數據集中都是不同的。Excel 2010 VBA - 檢查切片器值是否存在

每個數據集都有自己的一組數據透視表和切片器。我正在尋找使每個表的成本中心切片機匹配選定的切片機。

當兩個切片機具有相同的值時,我已經使其工作,但是當切片機被更改時沒有所選切片機的值時,它正在選擇所有值。因此,我試圖在它改變狀態之前檢查一個值是否存在,如果它沒有(可以選擇多個值)讓它移動到下一個狀態,但是我找不到一種簡單檢查值是否存在的方法如果不是,則繼續前進到代碼中每一位的下一個值。任何關於如何做到這一點或實現最初目標的簡單方法的建議將不勝感激

以下是我的VBA代碼。請注意,我實際上沒有VBA的任何經驗,這已經從搜索這個網站的答案,複製,似乎與有關拋出試錯一點點位構成。

Sub test() 
Dim sc1 As SlicerCache 
Dim sc2 As SlicerCache 
Dim si1 As SlicerItem 
Dim si2 As SlicerItem 

Set sc1 = ThisWorkbook.SlicerCaches("Slicer_CC1") 
Set sc2 = ThisWorkbook.SlicerCaches("Slicer_CC") 

Application.ScreenUpdating = False 
Application.EnableEvents = False 

sc2.ClearManualFilter 



For Each si1 In sc1.SlicerItems 
     sc2.SlicerItems(si1.Name).Selected = si1.Selected 
     On Error Resume Next 
Next si1 


    MsgBox "Update Complete" 

clean_up: 
     Application.EnableEvents = True 
     Application.ScreenUpdating = True 
     Exit Sub 

err_handle: 
     MsgBox Err.Description 
     Resume clean_up 
End Sub 
+0

只要它們共享一個PivotCache,切片器就可以連接到多個數據透視表。由於每套數據透視表都基於不同的數據集,因此數據透視圖將有所不同。如果在一個數據透視緩存中存在值,而在另一個數據透視圖中沒有,則會在CostCentre字段中出現問題。 N.b.如果您有權訪問/可以使用PowerPivot,那可以立即解決您的問題,因爲您可以在那裏鏈接數據集。 –

+0

事實上,當我最初接受任務時,我的計劃取決於電源支點,但事實證明,我們的IT支持功能已經取消了添加(所有添加,而不僅僅是針對電源支點的隨機仇視!),安裝其中的任何一個。因此,我需要深入研究VBA領域,但我對此知之甚少:-) – LCousins

+0

如果某個項目存在於您希望更新的切片器中,但不在最初設置的切片器中(例如,您想從中同步的切片器) ,應該選擇該項目嗎?如果沒有相同的東西呢? –

回答

1

對於初學者:如下用循環改變零件不會產生錯誤。如果來自slicer1的項目存在於正在更新的項目中,它將根據名稱從第一個分割器中進行選擇。

On Error Resume Next 
For Each si1 In sc1.SlicerItems 
    Set si2 = sc2.SlicerItems(si1.Name) 
    If Not si2 Is Nothing Then 
     si2.Selected = si1.Selected 
    End If 
Next si1 
On Error GoTo 0 

然而,項目是在第二截波器所不具備的第一個,就會不管在這種情況下選擇的,因爲你清除使用sc2.ClearManualFilter

初始選擇如果要反轉這種行爲,使用方法:

On Error Resume Next 
For Each si2 In sc2.SlicerItems 
    Set si1 = sc1.SlicerItems(si2.Name) 
    If Not si1 Is Nothing Then 
     si2.Selected = si1.Selected 
    Else 
     si2.Selected = False 
    End If 
Next si2 
On Error GoTo 0 

在這種情況下,如果沒有在第二截波器選擇(因爲沒有匹配的項目),沒有過濾器將被應用(全選)。

當然,您也可以省略sc2.ClearManualFilter行:這樣,您只會觸發每個項目與上面第一個選項相同的slicer1。其餘選擇將保持原樣,然後執行腳本。

希望這會有所幫助。

+0

真棒,那已經工作,很好,簡單的邏輯太謝謝你! – LCousins

相關問題