2015-11-17 119 views
1

下面的代碼適用於Excel 2013,但並不總是適用於Excel 2010.它在set pvtSource上引發錯誤。基於Excel 2013中的功能數據透視表創建數據透視表,但不支持Excel 2010

的錯誤是:

錯誤引用 「運行時錯誤 '-2147417848(80010108)':方法 對象pivotcache'的 'createpivottable' 失敗」。

有時它的工作原理沒有拋出錯誤。我無法弄清楚爲什麼或如何對這段代碼進行失敗驗證。

'Create temp sheet 
Dim wksSource As Worksheet 
Set wksSource = wbkSource.Sheets.Add(After:=Sheets(Worksheets.Count)) 

'Create new cache 
Dim pvcSource As PivotCache 
Dim pvtSource As PivotTable 
If Application.Version = "15.0" Then 
    'Create pivot cache 
    Set pvcSource = wbkSource.PivotCaches.Create(_ 
    SourceType:=xlExternal, _ 
    SourceData:=ActiveWorkbook.Connections("ThisWorkbookDataModel"), _ 
    Version:=5) 

    wbkSource.Activate 
    wksSource.Activate 

    'Create PivotTable 
    Set pvtSource = pvcSource.CreatePivotTable(_ 
    TableDestination:=ActiveCell, _ 
    DefaultVersion:=5) 

ElseIf Application.Version = "14.0" Then 
    'Create pivot cache 
    Set pvcSource = wbkSource.PivotCaches.Create(_ 
    SourceType:=xlExternal, _ 
    SourceData:=ActiveWorkbook.Connections("ThisWorkbookDataModel"), _ 
    Version:=xlPivotTableVersion14) 

    wbkSource.Activate 
    wksSource.Activate 

    'Create PivotTable 
    Set pvtSource = pvcSource.CreatePivotTable(_ 
    TableDestination:=ActiveCell, _ 
    DefaultVersion:=xlPivotTableVersion14) 

End If 
+0

我在Excel 2010中也遇到了這個問題,我無法創建* unused * Pivot Cache,我不得不在Pivot Table創建中創建一個* unused * Pivot Cache,然後通過Set pvcSource影響它到Pivot Cache變量= pvtSource.PivotCache'。希望這個幫助! (一個有用的鏈接,但您可能知道它:https://support.office.com/zh-cn/article/Upgrade-Power-Pivot-Data-Models-to-Excel-2013-c66578cb-74d5-43ae- a474-5a01be5db439 #__ what_s_different_in) – R3uK

+0

我的不好,它是用一個新創建的緩存來更改數據透視表的數據透視表緩存,然後存儲它以將其分配給其他人!讓我知道它是否幫助你! ;) – R3uK

回答

1

這裏透視緩存從命名Named_Range在名爲Sheet_Name該表的範圍創建的,我讓你重新命名這些以滿足您的需求! ;)

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 
2

Excel 2010的Power Pivot顯式不支持VBA腳本。