这个问题最初是作为answer https://stackoverflow.com/a/21321664/2712565作者:休·西格雷夫斯(Hugh Seagraves)关于相关问题的文章。他“想要引用一个工作表上的列表对象(表格),而另一工作表上的数据透视表引用该列表对象”,并且确实有一个相当好的答案,但询问是否有更直接的方式。我试图补充他的答案,但其他人认为这正在改变他答案的目的。
他的理由是,“由于列表对象是 Worksheets 集合的一部分,因此您必须知道列表对象所在工作表的名称才能引用它。”他提供了一些代码,如果您尚未创建数据透视表,这些代码将输出表的名称 (ListObject)。但我认为有一些通用代码来获取列表对象任何创建的数据透视表的对象,给定数据透视表 name.
数据透视表从数据透视缓存中获取数据。因此,您只需使用 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)