0

这个问题最初是作为Hugh Seagraves 对相关问题的回答的一部分发布的。他“想在一个工作表上引用另一个工作表上的数据透视表所引用的列表对象(表格)”,并且确实有一个相当好的答案,但询问是否有更直接的方法。我试图附上他的回答,但其他人认为这正在改变他回答的目的。

他的理由是,“由于列表对象是 Worksheets 集合的一部分,因此您必须知道列表对象所在的工作表的名称才能引用它。” 他提供了一些代码,如果您还没有创建数据透视表,它将输出表的名称 (ListObject)。但我认为在给定数据透视表名称的情况下,使用一些通用代码来获取任何已创建数据透视表的ListObject对象可能会有所帮助。

4

1 回答 1

1

数据透视表从它的数据透视缓存中获取它的数据。因此,您只需要使用 PivotCache.SourceData 属性来查询 ListObject 名称。

例如,如果我基于 ListObject 组成一个数据透视表,那么如果我在数据透视表中选择一个单元格,那么我可以使用它:

? activecell.PivotTable.PivotCache.SourceData
Table1

鉴于表名称在工作簿中是唯一的并且也是命名范围,那么要设置对实际 ListObject 的引用,您只需使用如下内容:

Set lo = Range(ActiveSheet.PivotTables("SomePivotTable").PivotCache.S‌​ourceData).ListObjec‌​t

知道了这一点,我们可以编写一个函数来接受数据透视表对象并返回包含数据透视表数据源的 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
于 2017-09-08T05:21:02.750 回答