2016-02-07 27 views
2

我目前正在使用動態儀表板。我在計算表上有幾個來自不同來源的數據透視表,但它們具有相同的過濾選項(日期,代理名稱等)。我的概覽表從這些數據透視表中獲取數據。這個想法是基於幾個切片機連接到1個主軸,我可以更新其他數據透視表並在總覽表上對結果進行操作。同步數據透視表 - VBA代碼不起作用

我已經使用下面的代碼來同步過濾選項。當我在有透視表的工作表內進行更改時,此代碼運行良好。但是,如果我將切片器轉換到概覽表並嘗試使用數據進行操作,則只有一個數據透視表在我的計算表上得到更新,因此只有一半的信息出現在概覽表上。

代碼在概覽和計算表上都被複制。請幫忙。

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) 

Dim wsMain As Worksheet 
Dim ws As Worksheet 
Dim ptMain As PivotTable 
Dim pt As PivotTable 
Dim pfMain As PivotField 
Dim pf As PivotField 
Dim pi As PivotItem 
Dim bMI As Boolean 

On Error Resume Next 
Set wsMain = ActiveSheet 
Set ptMain = Target 

Application.EnableEvents = False 
Application.ScreenUpdating = False 

For Each pfMain In ptMain.PageFields 
    bMI = pfMain.EnableMultiplePageItems 
    For Each ws In ThisWorkbook.Sheets("CalculationSheet") 
     For Each pt In ws.PivotTables 
      If ws.Name & "_" & pt <> wsMain.Name & "_" & ptMain Then 
       pt.ManualUpdate = True 
       Set pf = pt.PivotFields(pfMain.Name) 
         bMI = pfMain.EnableMultiplePageItems 
         With pf 
          .ClearAllFilters 
          Select Case bMI 
           Case False 
            .CurrentPage = pfMain.CurrentPage.Value 
           Case True 
            .CurrentPage = "(All)" 
            For Each pi In pfMain.PivotItems 
             .PivotItems(pi.Name).Visible = pi.Visible 
            Next pi 
            .EnableMultiplePageItems = bMI 
          End Select 
         End With 
         bMI = False 

       Set pf = Nothing 
       pt.ManualUpdate = False 
      End If 
     Next pt 
    Next ws 
Next pfMain 

Application.EnableEvents = True 
Application.ScreenUpdating = True 
End Sub 
+0

您好上市,二你已經嘗試修改切片機連接? – WltrRpo

+0

嗨,如上所述,數據透視表具有不同的數據源,因此無法連接切片器連接。我可以用代碼來做到這一點,但事實證明它非常慢。更快的方法是將其應用於直接轉換表。如果一個數據透視表發生了變化,另一個則受到影響,反之亦然因此,將切片機添加到其中一個樞軸以控制其他切片機的想法應該已經奏效。但是,如果切片機轉到另一個頁面,它就完美了,它只控制1個數據透視表。 – sabrekillah

回答

0

我相信問題是這一行:

For Each ws In ThisWorkbook.Sheets("CalculationSheet") 

該行限制的代碼只考慮數據透視表上一個名爲「CalculationSheet」表。如果你想讓它在工作簿中所有表的工作,然後將它改成這樣:

For Each ws In ThisWorkbook.WorkSheets 

...按原來的代碼在http://blog.contextures.com/archives/2012/01/03/change-all-pivot-tables-with-one-selection/

+0

嗨jeffreyweir,謝謝你的回覆。我已經改變了這個專門引用該表,否則過濾器變得瘋狂並且沒有應用數據。代碼停在「.ClearAllFilters」上。 – sabrekillah