Excel VBA根据参考值更改数据源
我无法弄清楚如何用VBA来更改数据透视表的数据源。
我有Sheet 1中的数据源和Sheet 2中的数据透视表
Sheets("Sheet1").Select LastRow = ActiveSheet.Range("A1").Offset(ActiveSheet.Rows.count - 1, 0).End(xlUp).Row sNewSource = ActiveSheet.Name & "!" & Range("A19:X" & LastRow).Address(ReferenceStyle:=xlR1C1) ActiveSheet.PivotTables("PivotTable1").ChangePivotCache _ ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:=sNewSource, Version:=xlPivotTableVersion14)
此刻我收到错误消息:无法正确获取Worksheet类的数据透视表
我试着看其他的解决scheme,但我不知道它不工作。
有任何想法吗?
这不是对你的问题的直接回答,更多的是解释如何做得更好的机会。
所有这些选项都涉及创build一个命名的范围或表名称 ,您将使用该名称作为数据透视表的数据源
选项1
为您的数据命名一个范围,并让VBA更新该命名范围
With ThisWorkbook.Names.Item("myRange") .RefersTo = Range(.RefersToRange, .RefersToRange.End(xlDown)) End With
选项2
给你的数据一个dynamic的命名范围 。 源参考可能如下所示:
=OFFSET(A1,,,COUNTA(A:A),COUNTA(1:1))
请注意, OFFSET
是一个易失性函数,会减慢更大的工作簿
选项3
把你的数据放入数据表 。 当您将数据格式化为表格时,当您在下面添加新数据时,Excel将自动resize
使用Select
和ActiveSheet
时经常出现问题。 当Sheet1上可能没有数据透视表(如上所述,数据透视表在Sheet2上)时,您试图访问Sheet1上的数据透视表。
这可以通过完全限定您的参考资料来解决 – 这意味着明确指出您希望使用哪个工作簿和哪个工作表。
考虑到这一点,这是否工作? (另)
With ThisWorkbook.Worksheets("Sheet1") LastRow = .Range("A1").Offset(.Rows.count - 1, 0).End(xlUp).Row sNewSource = .Name & "!" & .Range("A19:X" & LastRow).Address(ReferenceStyle:=xlR1C1) End With With ThisWorkbook.Worksheets("Sheet2") .PivotTables("PivotTable1").ChangePivotCache .PivotCaches.Create(SourceType:=xlDatabase, SourceData:=sNewSource, Version:=xlPivotTableVersion14) End With
感谢所有的build议。 最后,我设法使它与以下代码一起工作:
Sheets("Sheet1").Select ' Data Source LastRow = ActiveSheet.Range("A1").Offset(ActiveSheet.Rows.Count - 1, 0).End(xlUp).Row sNewSource = ActiveSheet.Name & "!" & Range("A1:B" & LastRow).Address(ReferenceStyle:=xlR1C1) sNewSource = "C:\xxx\[test.xlsm]" & sNewSource Sheets("Sheet2").Select ' Pivot Table ActiveSheet.PivotTables("PivotTable1").ChangePivotCache ActiveWorkbook. _ PivotCaches.Create(SourceType:=xlDatabase, SourceData:=sNewSource, Version:= _ xlPivotTableVersion14)