Страницы: 1
RSS
Найти имя листа "умной таблицы" (VBA)
 
Добрый день, всем!

Подскажите пожалуйста, как просто из VBA найти имя листа где находится искомая "умная" таблица Excel?
На ум только приходит перебор всех листов из книги и всех ListObjects на листах.
Во время этого цикла, проверять совпадение ListObjects.Name с именем искомой таблицы. Имя листа получить как ListObjects.Parent.Name
Но как то кажется это "кривой" метод, использовать циклы.

Можно как-то проще?
 
Код
Range("Таблица1").Parent.Name
 
Спасибо за ответ, но пробовал, не работает. Application or Object defined.
Как я понял, таблица - это объект ListObject из коллекции Листа. У нее есть Range, но обратиться к нему можно только через имя листа и объект.
То есть работает так:
Код
Sheets("Лист1").Range("Таблица1").Parent.Name
Sheets("Лист1").ListObjects("Таблица1").Parent.Name

Но имя листа мне как раз и нужно найти.  
Изменено: vikttur - 09.08.2021 19:24:57
 
Вообще, строка
MsgBox Range("Таблица2").Parent.Name
должна работать без указания листа, т.к. имя таблицы является глобальным внутри книги. Работать не будет в том случае, если код запускается в тот момент, когда активна другая книга, в которой этих таблиц нет.
Так же не будет работать, если код расположен в модуле конкретного листа. Т.к. в этом случае Range без указания родителя будет всегда ассоциироваться с тем листом, в котором сам код.
Изменено: The_Prist - 02.06.2016 11:50:28
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо, добрый человек!
Все стало на свои места.
Код был в модуле листа, в событии change элемента activex. Таблица(таблицы), естественно в другом (других) листах.
 
Скажите, пожалуйста, можно ли без макроса, формулой  (без VBA) вытащить имя листа, на котором находится умная таблица?
 
Код
=ПРАВСИМВ(ЯЧЕЙКА("имяфайла";A1);ДЛСТР(ЯЧЕЙКА("имяфайла";A1))-ПОИСК("]";ЯЧЕЙКА("имяфайла";A1)))
 
RAN, Кот ,  и где тут имя умной таблицы? :-)

=TRIM(RIGHT(SUBSTITUTE(CELL("filename";Данные[#All]);"]";REPT(" ";32));32))
или
=TRIM(RIGHT(SUBSTITUTE(CELL("filename";INDIRECT("Данные[#All]"));"]";REPT(" ";32));32))
Все с надеждой то лист не содержит в имени подряд более одного пробела и не имеет их по краям.э
ну или
=REPLACE(CELL("filename";Данные[#All]);1;FIND("]";CELL("filename";Данные[#All]));)
Изменено: БМВ - 09.08.2021 20:12:32
По вопросам из тем форума, личку не читаю.
 
Код
=ПРАВСИМВ(ЯЧЕЙКА("имяфайла";Таблица1[#Заголовки]);ДЛСТР(ЯЧЕЙКА("имяфайла";
       Таблица1[#Заголовки]))-ПОИСК("]";ЯЧЕЙКА("имяфайла";Таблица1[#Заголовки])))

:)
 
Цитата
написал:
Range("Таблица1").Parent.Name
т.е. ссылка на таблицу по имени ни как иначе как
   Dim tbl As ListObject
   Set tbl = Range("Таблица1").Parent.ListObjects("Таблица1")

Красивее ничего нет ?
Страницы: 1
Наверх