2015-11-10 65 views
1

我有大約10個數據透視表,每個數據透視表都在另一個工作表上。更改現有數據透視表的數據源

我需要將它們中的每一個的數據源更改爲相同的值。 Pivotcaches.count給我1這個工作簿,所以我假設每個表都指向這個緩存。

對於如何更改此緩存而不是創建十個新緩存,您有一些建議嗎?

這裏是我的了:

Sub Test(Ziel As String, Zieltab As String) 
    Dim RNG As Range 
    Dim letzteZeile As Double 
    Dim letzteSpalte As Double 
    Dim Spalte As String 
    Dim Index As Integer 
    Dim Wb As Workbook 
    Dim Ws As Worksheet 
    Dim pC As PivotCache 
    Dim pT As PivotTable 


    letzteZeile = Workbooks(Ziel).Worksheets(Zieltab).UsedRange.SpecialCells(xlCellTypeLastCell).Row 
    letzteSpalte = Workbooks(Ziel).Worksheets(Zieltab).Range("A1").SpecialCells(xlCellTypeLastCell).Column 
    Spalte = Split(Workbooks(Ziel).Worksheets(Zieltab).Cells(1, letzteSpalte).Address, "$")(1) 

    Set RNG = Worksheets(Zieltab).Range("A1:" & Spalte & letzteZeile) 



    Set Wb = ActiveWorkbook 
    Set pC = Wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="'" & Wb.Sheets(Zieltab).Name & "'!" & RNG.Address, Version:=xlPivotTableVersion12) 


    For Each Ws In Wb.Sheets 
     For Each pT In Ws.PivotTables 
      Set pT.PivotCache = pC 
     Next pT 
    Next Ws 
End Sub 

這是它的實際樣子。它說方法不會匹配或者像那樣。

回答

2

由於您只有一個透視緩存,您需要創建一個新窗口,然後將其應用於您的透視表。

這裏的透視緩存是在名爲Sheet_Name的圖表中命名爲Named_Range的範圍中創建的,我將它留給您重新命名以符合您的需要! ;)使用創建兩個數據透視表和的PivotCaches方法

Sub Test_Gring() 
Dim wB As Workbook, _ 
    wS As Worksheet, _ 
    pC As PivotCache, _ 
    pT As PivotTable, _ 
    bCreated As Boolean 

For Each wS In wB.Sheets 
    For Each pT In wS.PivotTables 
     If Not bCreated Then 
      pT.ChangePivotCache wB.PivotCaches.Create(SourceType:=xlDatabase, _ 
             SourceData:="'Sheet Name'!" & Range("Named_Range").Address, _ 
             Version:=xlPivotTableVersion14) 'xlPivotTableVersion12 
      Set pC = pT.PivotCache 
      bCreated = True 
     Else 
      If pT.CacheIndex <> pC.Index Then pT.CacheIndex = pC.Index 
     End If 
    Next pT 
Next wS 

'Save to delete unused Pivot Caches 
wB.Save 
End Sub 
+1

哇謝謝你很酷的答案。數據源不需要是字符串嗎? – Gring

+0

設置pT.PivotCache = pC將不適用於我 – Gring

+0

@Gring:嘗試編輯(我把2個可能性,我會讓你選擇一個你喜歡的);) – R3uK

0

我同意R3UK的答案,但我已經經歷了太多的跨版本的麻煩(Excel的2013到Excel 2010)。無論是過去的說法,,更名或Excel的2013(Application.Version 15.0)數據透視表標準(xlPivotTableVersion15)使用不是由Excel 2010中(Application.Version 14.0)時確認(標準xlPivotTableVersion14)我想。

我覺得方法風險較小。它可以用於以類似的方式輕鬆創建數據透視表。

Sub ChangeCacheWithAdd() 
Dim wB As Workbook, _ 
    wS As Worksheet, _ 
    pC As PivotCache, _ 
    pT As PivotTable, _ 
    bCreated As Boolean 

For Each wS In wB.Sheets 
    For Each pT In wS.PivotTables 
     If Not bCreated Then 
      Set pC = wB.PivotCaches.Add(SourceType:=xlDatabase, _ 
        SourceData:="'Sheet Name'!" & Range("Named_Range").Address 
      pT.ChangePivotCache pC 
      bCreated = True 
     Else 
      If pT.CacheIndex <> pC.Index Then pT.CacheIndex = pC.Index 
     End If 
    Next pT 
Next wS 

'Save to delete unused Pivot Caches 
wB.Save 
End Sub