我有一个包含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
...
Range
对象(当 SourceType
是 xlConsolidation
或 xlDatabase
时)微软文档:
'*** 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