使用 VBA 更改 PIVOT 数据源?

问题描述 投票:0回答:1

我有一个包含sheet1和pivottable4的excel文件。 ivottable4的源数据是“路径”“文件”“工作表”和“范围”。

我正在寻找一行代码,它将用“路径”“文件”“工作表”和“范围”更新数据透视表4。

我尝试了各种例子但没有成功。我似乎无法获得具有完整路径的 SourceData。

...

    Dim DataSheet As Worksheet
    Dim PivotSheet As Worksheet
    Dim pvtcache As PivotCache
    Dim FilePath As String
    Dim PivotSource As String
    Dim PivotName2 As String
    Dim PivotName4 As String
    Dim OpenBook As Workbook

    PivotName2 = "PivotTable2"
    PivotName4 = "PivotTable4"
    'Get Data Source File Path and File Name
    FilePath = Application.GetOpenFilename("CY6 Excel (*.xlsx),*.xlsx")
    PivotSource = "'[" & FilePath & "]Data'!$A:$AN"

    MsgBox "Pivot FileName" & PivotSource, vbInformation
    Application.ScreenUpdating = False
    ThisWorkbook.Activate
    Set PivotSheet = ThisWorkbook.Worksheets("Sandbox")
   'Change Pivot Table Data Source Range Address
    Set pvtcache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PivotSource) 'Error 1004 application defined error

    ThisWorkbook.PivotTables("PivotTable4").ChangePivotCache pvtcache 'Error 1004 application defined error
    PivotSheet.PivotTables(PivotName2).RefreshTable

    PivotSheet.PivotTables(PivotName4).RefreshTable
    Cells.EntireColumn.AutoFit

...

excel vba pivot pivot-table dynamic-pivot
1个回答
0
投票
  • 第二个参数应该传递一个
    Range
    对象(当
    SourceType
    xlConsolidation
    xlDatabase
    时)

微软文档:

PivotCaches.Create 方法(Excel)

'*** Untesed Code ***
    Dim DataSheet As Worksheet
    Dim PivotSheet As Worksheet
    Dim pvtcache As PivotCache
    Dim FilePath As String
    Dim PivotSource As String
    Dim PivotName2 As String
    Dim PivotName4 As String
    Dim OpenBook As Workbook

    PivotName2 = "PivotTable2"
    PivotName4 = "PivotTable4"
    'Get Data Source File Path and File Name
    FilePath = Application.GetOpenFilename("CY6 Excel (*.xlsx),*.xlsx")

    ' *** Change Start
    Dim dataBook As Workbook, dataSht As Worksheet, pvtSource As Range
    dataBook = Workbooks.Open(FilePath)
    On Error Resume Next
    Set dataSht = dataBook.Worksheets("Data")
    On Error GoTo 0
    If dataSht is Nothing Then
        MsgBox "Can't found sheet named [Data]"
        dataBook.Close False
        Exit Sub
    End If
    Set pvtSource = dataSht.Range("A:AN")
    ' PivotSource = "'[" & FilePath & "]Data'!$A:$AN"

    ' MsgBox "Pivot FileName" & PivotSource, vbInformation
    Application.ScreenUpdating = False
    ThisWorkbook.Activate
    Set PivotSheet = ThisWorkbook.Worksheets("Sandbox")
   'Change Pivot Table Data Source Range Address
    Set pvtcache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=pvtSource) ' the 2nd arguement should be a Range object
    ' *** Change End

    ThisWorkbook.PivotTables("PivotTable4").ChangePivotCache pvtcache 'Error 1004 application defined error
    PivotSheet.PivotTables(PivotName2).RefreshTable

    PivotSheet.PivotTables(PivotName4).RefreshTable
    Cells.EntireColumn.AutoFit
© www.soinside.com 2019 - 2024. All rights reserved.