Да, это делает это! Спасибо за редактирование вашего ответа. И если предположить, что Pivot создан из ListObject, имя листа можно получить с помощью одной строки:

вопрос был изначально опубликован как частьответ Хью Сигрейвс по связанному вопросу. Он «хотел сослаться на объект списка (таблицу) на одном листе, на который ссылается сводная таблица на другом листе», и получил довольно хороший ответ, но спросил, есть либолее прямой путь, Я пытался прикоснуться к его ответу, но другие чувствовали, что это меняет цель его ответа.

Он рассуждал так: «Поскольку объекты списка являются частью коллекции« Рабочие листы », вы должны знать имя рабочего листа, на котором находится объект списка, чтобы ссылаться на него». Он предоставил некоторый код, который выведет имя таблицы (ListObject), если вы еще не создали сводную таблицу. Но я подумал, что было бы полезно иметь некоторый общий код, чтобы получитьListObject объект любой созданной сводной таблицы, учитываяPivotTable имя.

 jeffreyweir14 окт. 2017 г., 01:43
Как насчет принятия ответа от одного из следующих?

Ответы на вопрос(1)

Решение Вопроса

ам просто нужно использовать свойство PivotCache.SourceData для запроса имени ListObject.

Например, если я создаю сводную таблицу на основе объекта ListObject, то, если я выберу ячейку в сводной таблице, я смогу использовать это:

? activecell.PivotTable.PivotCache.SourceData
Table1

Учитывая, что имена таблиц уникальны в рабочей книге и также являются именованными диапазонами, тогда для установки ссылки на фактический объект ListObject вы просто используете что-то вроде этого:

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

Зная это, мы можем написать функцию, которая принимает объект PivotTable и возвращает объект ListObject, который содержит источник данных PivotTable, примерно так:

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
 jeffreyweir17 окт. 2017 г., 22:42
Да, это так, хотя вы правы, что мой ответ не показывает метод. Поскольку Table1 является уникальным именованным диапазоном, вы можете просто использовать это:Set lo = Range(ActiveSheet.PivotTables("SomePivotTable").PivotCache.SourceData).ListObject
 GlennFromIowa18 окт. 2017 г., 19:10
Да, это делает это! Спасибо за редактирование вашего ответа. И если предположить, что Pivot создан из ListObject, имя листа можно получить с помощью одной строки:? Range(Worksheets("SomeWorksheetName").PivotTables("SomePivotTableName").PivotCache.SourceData).ListObject.Parent.Name
 GlennFromIowa17 окт. 2017 г., 22:15
На самом деле, это дает имя объекта списка / таблицы, но делаетне раскрыть имя родительского рабочего листа, а также не дать вам никакой ссылки на объект списка. Чтобы сослаться на объект списка, вам все равно понадобится имя листа. Цель состояла в том, чтобы иметь заменуSet LO = ActiveSheet.ListObjects("YourListObjectName")когда объект List находится на листе, отличном от ActiveSheet.

Ваш ответ на вопрос