Excel 如何动态检索数据的范围地址,然后更改透视表数据源范围地址?
我试图动态检索数据的范围地址,然后更改透视表数据源范围地址 涉及三张纸 1) ThisWorkbook.Worksheets(“sheet1”)-主仪表板,具有从sheet2移动的轴图和切片器Excel 如何动态检索数据的范围地址,然后更改透视表数据源范围地址?,excel,vba,Excel,Vba,我试图动态检索数据的范围地址,然后更改透视表数据源范围地址 涉及三张纸 1) ThisWorkbook.Worksheets(“sheet1”)-主仪表板,具有从sheet2移动的轴图和切片器 2) 此工作簿。工作表(“表2”)-数据透视表 3) ThisWorkbook.Worksheets(“sheet3”)—在运行以下代码之前从不同工作簿复制的源数据 我的代码给出 运行时错误5:过程调用或参数无效 错误指向Set pt=Pivot\u sht.PivotTables(PivotName).
2) 此工作簿。工作表(“表2”)-数据透视表
3) ThisWorkbook.Worksheets(“sheet3”)—在运行以下代码之前从不同工作簿复制的源数据 我的代码给出 运行时错误5:过程调用或参数无效 错误指向
Set pt=Pivot\u sht.PivotTables(PivotName).changeprovotcache(pc)
我的主要工作表上还有另外两个数据透视图。使用相同的代码,它们刷新时不会出现任何问题
完整代码:
Option Explicit
Sub test()
Dim daMa As Worksheet
Dim daPerf As Worksheet
Dim LastRow As Long
Dim LastCol As Long
Dim Data_sht As Worksheet
Dim Pivot_sht As Worksheet
Dim DataRange As Range
Dim PivotName As String
Dim NewRangePH As String
Dim pt As PivotTable
Dim pc As PivotCache
'REFRESHING PERFORMANCE HISTORY
'Set Variables Equal to Data Sheet and Pivot Sheet
Set Data_sht = ThisWorkbook.Worksheets("sheet3")
Set Pivot_sht = ThisWorkbook.Worksheets("sheet2")
'Enter in Pivot Table Name
PivotName = "PHPivot"
With Data_sht
.Activate
'Dynamically Retrieve Range Address of Data
LastRow = .Cells(.Rows.Count, "G").End(xlUp).Row
LastCol = 12
Set DataRange = Data_sht.Range(Cells(LastRow, 1).Address, Cells(1, LastCol).Address)
End With
NewRangePH = Data_sht.Name & "!" & _
DataRange.Address(ReferenceStyle:=xlR1C1)
'Make sure every column in data set has a heading and is not blank (error prevention)
If WorksheetFunction.CountBlank(DataRange.Rows(1)) > 0 Then
MsgBox "One of your data columns has a blank heading." & vbNewLine _
& "Please fix and re-run!.", vbCritical, "Column Heading Missing!"
Exit Sub
End If
'Change Pivot Table Data Source Range Address
Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=NewRangePH)
Set pt = Pivot_sht.PivotTables(PivotName).ChangePivotCache(pc)
End Sub
我搜索了许多Google结果和Stack Overflow的结果,并在发布此问题之前尝试了至少10种不同的方法。“set pt=”is worn,您不想设置新的数据透视表。
改用
Pivot_sht.PivotTables(PivotName).ChangePivotCache ActiveWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
newRangePH, Version:=xlPivotTableVersion15)
当您设置
datarange
时,您没有像Data\sht那样在单元格
前面加上一个表前缀。
这是故意的吗?我能看到那张纸,是的。有意“使用数据和.Activate”来激活数据表。您会选择不同的方法吗?with应该与datasht和的单元格类似(
类似于lastRow
I ahev按照建议进行修改(设置DataRange=.Range(.cells(lastRow,1).Address,.cells(1,LastCol).Address)),但行中的问题相同(设置pt=Pivot\u sht.PivotTables(PivotName).ChangePivotCache(pc))ChangePivotCache所需的参数是字符串数据类型。。从您的代码段中不清楚您输入的数据类型,但从语法来看,它似乎是一个对象。嗨,Max,谢谢您的回答。我已经尝试过这个问题,现在已经仔细检查了。问题仍然指向(Pivot\u sht.PivotTables(PivotName).ChangePivotCache ThisWorkbook.\uPivotCaches.Create(SourceType:=xlDatabase,SourceData:=\uNewRangeph,Version:=xlPivotTableVersion15))我现在在我的电脑上测试了这一点,它运行正常,没有错误。也许您有不同版本的ESCL,请删除该部分,“Version:=xlPivotTableVersion15”