2015-11-17 120 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脚本。