Vba 基于power pivot创建数据透视表在Excel 2013中有效,但在Excel 2010中无效

Vba 基于power pivot创建数据透视表在Excel 2013中有效,但在Excel 2010中无效,vba,excel,powerpivot,Vba,Excel,Powerpivot,下面的代码适用于Excel 2013,但并不总是适用于Excel 2010。它在设置pvtSource上抛出一个错误 错误是: 错误引用“运行时错误”-2147417848(80010108)':方法 对象“数据透视缓存”的“createpivottable”失败。“ 有时,它不会抛出错误。我不明白为什么或者如何对这段代码进行防失败 'Create temp sheet Dim wksSource As Worksheet Set wksSource = wbkSource.Sheets.Add

下面的代码适用于Excel 2013,但并不总是适用于Excel 2010。它在
设置pvtSource
上抛出一个错误

错误是:

错误引用“运行时错误”-2147417848(80010108)':方法 对象“数据透视缓存”的“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

此处,Pivot缓存是从名为
Sheet_Name
的工作表中名为
名为_Range
的范围创建的,我让您根据需要重命名这些范围!)

子测试_Gring()
将wB设置为工作簿_
wS-As工作表_
pC作为数据透视缓存_
pT作为数据透视表_
b创建为布尔值
对于wB.Sheets中的每个wS
对于wS.PivotTables中的每个pT
如果不创建,则
pT.ChangePivotCache wB.PivotCaches.Create(SourceType:=xlDatabase_
SourceData:=“工作表名称”!”和范围(“命名范围”)。地址_
版本:=xlPivotTableVersion14)“xlPivotTableVersion12
设置pC=pT.PivotCache
b创建=真
其他的
如果pT.CacheIndex pC.Index,则pT.CacheIndex=pC.Index
如果结束
下一个pT
下一个wS
'保存以删除未使用的数据透视缓存
wB.保存
端接头

VBA脚本显然不支持Excel 2010的Power Pivot。

我在Excel 2010中也遇到了类似的问题,我无法创建未使用的Pivot缓存,我必须在Pivot表创建中执行此操作,然后通过
Set-pvcSource=pvtSource.PivotCache
将其影响到Pivot缓存变量。希望这有帮助!(这也是一个有用的链接,但您可能知道:)我的错,它正在使用新创建的缓存更改数据透视表的数据透视缓存,然后将其存储以分配给其他人!让我知道这是否对你有帮助!;)
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