Страницы: 1
RSS
Можно ли в коде обратиться к ListObjects(), не обращаясь к WorkSheets()?
 
Добрый день, жители Планеты!
Никогда не задавался вопросом, но тут назрело, видимо.
Можно ли в коде обратиться к объекту "Умная таблица" (ListObject) в обход объекта Worksheet?
Когда мы обращаемся к Умной таблице в формуле на листе, не требуется делать ссылку сначала на лист, на котором она находится. Мы сразу пишем, например: =Таблица1[№ карточки] и не пишем ='Лист1'!Таблица1[№ карточки]. И второй вариант вернет ошибку.
В коде же - наоборот. Если текущий лист НЕ  Лист1, и на текущем листе нет умной таблицы "Таблица1", то:
- вернет ошибку строка ...= ListObjects("Таблица1")
- не вернет ошибку - строка ...= WorkSheets("Лист1").ListObjects("Таблица1")
Можно ли обратиться к Умной таблице, если я не знаю, на каком листе она находится, но знаю ее название? ☺
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Ну, как бы это объект листа и по объектной модели иного не предусмотрено.
По вопросам из тем форума, личку не читаю.
 
Почему в Курилке?
 
Цитата
vikttur написал:
Почему в Курилке?
Тут смолить удобнее  :D
По вопросам из тем форума, личку не читаю.
 
Назло курящему медведю переношу в общую ветку )
 
Смотря что нужно. Можно обращаться как к именованному диапазону Таблица1:
Код
arr = [Таблица1].Value
Свойства и методы листа ListObject, естественно, доступны не будут. Но обратиться можно.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
vikttur написал:
Почему в Курилке?
Ну, посчитал, что вопрос - больше теоретический, чем практический ☺

Цитата
БМВ написал:
Ну, как бы это объект листа и по объектной модели иного не предусмотрено.
Ну, так то - да... Но формула - работает, получается, напрямую, Книга►Ячейки, в обход логики объектнй модели Приложение►Книга►Лист►Ячейки...
Вселяет надежду (или сомнение...), что макрос тоже так может...
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Михаил Лебедев написал:  Но формула - работает... напрямую, Книга►Ячейки
Где такое? А лист? А если не нужен лист, то не нужна и книга.

Сравнение некорректное. Формула находится в ячейке листа определенной книги. Если ссылка на этот же лист, то подразумевается, что обращение к родительскому объекту. Если на другой - указываем имя листа. Если же из другой книги - указываем еще и книгу.
А у макроса один родитель - модуль в редакторе :), он не ведает, что есть ячейки и книги, пока ему этого не растолкуешь.
 
Цитата
vikttur написал:
Формула находится в ячейке листа определенной книги.
Вить, тезка говорит о том, что имя таблицы уникально для книги и при обращении с листа не требует указания листа где таблица находится.

Михаил Лебедев,  скорее всего обрабатывается приложением иначе
так можно
Код
= [Table1]
 но не спасет
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
но не спасет
Да :(
Видимо, придется создавать коллекцию умных таблиц книги (циклом в цикле) и с ней уже работать.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
И все же: для каких целей это нужно? Зная имя таблицы можно без проблем определить её местоположение без всяких циклов:
Код
Sub GetTable()
    Dim rt As Range, lo As ListObject
    On Error Resume Next
    Set rt = [Таблица1]
    If Not rt Is Nothing Then
        Set lo = rt.Parent.ListObjects("Таблица1")
        MsgBox lo.Name
    End If
End Sub
Если надо через переменную, то можно все почти так же:
Код
Sub GetTable()
    Dim rt As Range, lo As ListObject
    Dim st$
    st = "Таблица1"
    On Error Resume Next
    Set rt = Application.Evaluate(st)
    If Not rt Is Nothing Then
        Set lo = rt.Parent.ListObjects("Таблица1")
        MsgBox lo.Name
    End If
End Sub
Изменено: Дмитрий(The_Prist) Щербаков - 09.11.2020 19:23:03
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Доброе время суток
Цитата
Дмитрий(The_Prist) Щербаков написал:
Set lo = rt.Parent.ListObjects("Таблица1")
Дмитрий, а какой смысл в таком усложнении? Вроде вполне работает
Код
?[Таблица1].ListObject.Name

Следовательно вполне достаточно
Код
Set lo = [Таблица1].ListObject
Изменено: Андрей VG - 09.11.2020 20:55:12
 
Андрей VG, Андрей, в динамическом имени.
но
Код
Evaluate("Table1").listobject
Изменено: БМВ - 09.11.2020 21:03:42
По вопросам из тем форума, личку не читаю.
 
Дмитрий(The_Prist) Щербаков, спасибо за ценный совет и код. То, что надо  :idea:  
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Или
Код
Set lo = Range("Таблица1").ListObject
 
Цитата
БМВ написал:
в динамическом имени.
Привет, Михаил.
Это понятно с самого первого поста - для него решения не знаю. Я же задал вопрос про вполне конкретную часть кода Дмитрия.
 
Цитата
RAN написал:
Или
:idea:  
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Андрей VG написал:
а какой смысл в таком усложнении?
да никакого. Я просто привел пример как можно обратиться к таблице без указания листа на основании кодов из стартового сообщения. А уж что там реально нужно и что с этим делать - автору решать :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
привел пример
Дмитрий, спасибо.
Страницы: 1
Наверх