2017-06-05 89 views
0

我正在使用Excel中的VBA代碼。第一個數據透視表是由VBA生成的,運行良好。不過,我需要更多的數據透視表基於相同的數據源與不同的行或列項目。我嘗試將第一個數據透視表複製到單元格L8,但粘貼後,新數據透視表中的數據消失。當我手動刷新數據透視表時,數據再次出現。這裏是我的代碼 -複製的數據透視表上的VBA數據丟失

wsPvtTbl.PivotTables("PivotTable1").TableRange2.Copy Destination:=wsPvtTbl.Range("L8") 

這是第二個數據透視表 enter image description here

的屏幕截圖,有沒有辦法解決?謝謝。

*****更新*****

我累刷新數據透視表與下面的代碼連接到不同的按鈕,它的工作。我認爲它會在同一個子集內工作,但我不確定它爲什麼只能單獨工作?

ThisWorkbook.refreshall 
+0

雖然這不應該是一個情況下,複製的數據透視表使用的ThisWorkbook後。 RefreshAll作爲下一行。 – sktneer

+0

@sktneer謝謝。我添加了ActiveWorkbook.RefreshAll但是表仍然保持不變。有任何想法嗎?謝謝 – AmadeusNing

+0

嘗試在粘貼後清除新的數據透視表過濾器,即:wsPvtTbl.PivotTables(「PivotTable2」)。ClearAllFilters – RADO

回答

0

也許你可以嘗試這樣的事情......

Sub CopyPivotTable() 
Dim wsPvtTbl As Worksheet 
Dim pt As PivotTable 
Dim pf As PivotField 

Set wsPvtTbl = ActiveSheet 

wsPvtTbl.PivotTables("PivotTable1").TableRange2.Copy Destination:=wsPvtTbl.Range("L8") 

For Each pt In wsPvtTbl.PivotTables 
    If pt.Name <> "PivotTable1" Then    
     For Each pf In pt.PivotFields 
      pf.ClearAllFilters 
     Next pf 
    End If 
Next pt 
End Sub 
+0

)@sktneer我剛剛注意到,如果我按行(F8)運行代碼行,新的數據透視表將正確顯示。但是,當我按F5鍵或單擊按鈕這個表會丟失數字任何建議?謝謝 – AmadeusNing

+0

我測試了它,它適用於我。不知道你的結局是怎麼回事 – sktneer

+0

我在另一個宏中添加了「ThisWorkbook.refreshall」,它工作。把它放到原來的分區裏它不會再工作 – AmadeusNing

0

試試這個:

Dim Source_Pvt As PivotTable 
Dim Target_Pvt As PivotTable 
Dim Pvt_Count As Long 

    Set Source_Pvt = wsPvtTbl.PivotTables("PivotTable1") 
    Source_Pvt.TableRange2.Copy Destination:=wsPvtTbl.Range("L8") 

    Pvt_Count = wsPvtTbl.PivotTables.Count 
    Set Target_Pvt = wsPvtTbl.PivotTables(Pvt_Count) 

    Target_Pvt.ClearAllFilters 
    Target_Pvt.PivotCache.Refresh