数据透视表从它的数据透视缓存中获取它的数据。因此,您只需要使用 PivotCache.SourceData 属性来查询 ListObject 名称。
例如,如果我基于 ListObject 组成一个数据透视表,那么如果我在数据透视表中选择一个单元格,那么我可以使用它:
? activecell.PivotTable.PivotCache.SourceData
Table1
鉴于表名称在工作簿中是唯一的并且也是命名范围,那么要设置对实际 ListObject 的引用,您只需使用如下内容:
Set lo = Range(ActiveSheet.PivotTables("SomePivotTable").PivotCache.SourceData).ListObject
知道了这一点,我们可以编写一个函数来接受数据透视表对象并返回包含数据透视表数据源的 ListObject,如下所示:
Public Function GetListObjectForPT(pt As PivotTable) As ListObject
On Error Resume Next ' In case the Pivot isn't created from a ListObject
Set GetListObjectForPT = Range(pt.PivotCache.SourceData).ListObject
End Function
...您可以像这样使用它:
Sub Macro1()
Dim pt As PivotTable
Dim lo As ListObject
Set pt = Worksheets("SomeWorksheetName").PivotTables("SomePivotTableName")
Set lo = GetListObjectForPT(pt)
End Sub