更改数据透视缓存的简单方法 [英] Simple way to change a pivot cache

查看:112
本文介绍了更改数据透视缓存的简单方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这不起作用...

Sub changeData_Error()

Dim pc As PivotCache
Set pc = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Range("A1:B2"))
Excel.Sheets("Sheet1").PivotTables("PivotTable1").ChangePivotCache pc

ThisWorkbook.RefreshAll
End Sub

最终得到了以下内容,这些内容似乎过于复杂.可以简化吗?

Have ended up with the following which seems over complicated. Can it be simplified?

Sub changeData()

 ':: this is the table I'd like to change the data
Dim mainP As PivotTable
Set mainP = ThisWorkbook.Sheets("Sheet1").PivotTables("PivotTable1")

 ':: create a new cache and set it to the new data range
Dim pc As PivotCache
Set pc = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Range("A1:B3"))

 ':: create a temporary pivot table
Dim pt As PivotTable
Set pt = ThisWorkbook.Sheets("Sheet1").PivotTables.Add(pc, Range("AA1"), "temptable")

 ':: find the index of the cache used by the temp table
Dim i As Integer
i = pt.CacheIndex
 ':: use the index found to redirect the main pivot at the new cache
mainP.CacheIndex = i

 ':: get rid of temp table
pt.TableRange2.Clear

 ':: this might not be needed
ThisWorkbook.RefreshAll
End Sub

推荐答案

以下代码在两个不同的数据集之间切换,通过数据透视表的字段列表中是否存在 Col3 可以很容易地看到报告:

The following code switches between two different datasets, easily seen visibly by the presence/absence of Col3 in the Field List for the Pivot report:

Option Explicit

Public Sub SwitchToData1()
    On Error GoTo ErrHandler
    SwitchCacheData _
        ThisWorkbook.Sheets("Report").PivotTables("PivotTable1"), _
        Range("Data1!A1:B4")
EndSub:
    Exit Sub

ErrHandler:
    MsgBox "Error #" & Err.Number * vbCrLf & Err.Description, _
        vbOKOnly Or vbCritical, _
        "Error!"
    Resume EndSub
End Sub


Public Sub SwitchToData2()
    On Error GoTo ErrHandler
    SwitchCacheData _
        ThisWorkbook.Sheets("Report").PivotTables("PivotTable1"), _
        Range("Data2!A1:C4")
EndSub:
    Exit Sub

ErrHandler:
    MsgBox "Error #" & Err.Number * vbCrLf & Err.Description, _
        vbOKOnly Or vbCritical, _
        "Error!"
    Resume EndSub
End Sub

Private Sub SwitchCacheData(pvt As PivotTable, rng As Range)
    pvt.ChangePivotCache ThisWorkbook.PivotCaches.Create(xlDatabase, rng)
    pvt.RefreshTable
End Sub

这篇关于更改数据透视缓存的简单方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆