我如何使用“预定义的范围”作为我的数据透视表数据源

我有以下代码

Dim S As Range Set S = Range(Sheets(1).Cells(4, 2), Sheets(1).Cells(18, 9)) Sheets(4).PivotTables("PivotTable1").ChangePivotCache ThisWorkbook. _ PivotCaches.Create(SourceType:=xlDatabase, SourceData:=S, Version:=xlpivotversion14) 

这给我一个“无效的过程或参数”的错误!

但是当我使用范围而不是像下面的“S”:

 Sheets(4).PivotTables("PivotTable1").ChangePivotCache ThisWorkbook. _ PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "C:\Users\Matt\Desktop\[FY19_Proposed_Sheet_V2.xlsm]Proposed Projects!R5C1:R29C18" _ , Version:=xlPivotTableVersion14) 

我没有错误!

我想使用“S”,以便我可以主动更改和更新它。 代码中指定的固定范围是假设的。

谢谢,Matt!

这是因为你必须提供一个string来引用你想设置为SourceDataRange 。 以下将起作用:

 Sub Test() Dim S As Range Dim shName as string Dim rngAddress as string Dim sourceDataStr as string 'Has to hold both sheetname and address. Set S = Range(Sheets(1).Cells(4, 2), Sheets(1).Cells(18, 9)) shName = Sheets(1).Name 'Capture sheet name of where the range is in your case rngAddress = S.Address 'Get the address for reference. sourceDataStr = shName & "!" & rngAddress 'Get the correct sourceData string Sheets(4).PivotTables("PivotTable1").ChangePivotCache ThisWorkbook. _ PivotCaches.Create(SourceType:=xlDatabase, SourceData:=sourceDataStr , Version:=xlpivotversion14) 'Tadaaaaa... End Sub 

不是最短的或者最有运算时间的代码,毕竟它是一个样本。