Страницы: 1
RSS
(VBA) Как получить имя (или индекс) "умной" таблицы на которой сейчас стоит курсор?
 
Есть необходимость вставить через VBA в строку "умной" таблицы на которой стоит курсор (выделена) некоторые данные.
На одном листе таблиц может быть несколько поэтому ListObjects(1) не подходит. Надо знать индекс (или имя) именно той таблицы, на которой курсор.
Поиск ничего похожего не дал.
 
Код
ActiveCell.ListObject.Name
Кому решение нужно - тот пример и рисует.
 
Как-то так
Код
Sub tt_1()
 Dim Obj As ListObject
 If ActiveSheet.ListObjects.Count = 0 Then Exit Sub
 For Each Obj In ActiveSheet.ListObjects
    If Not Intersect(ActiveCell, Obj.Range) Is Nothing Then
        MsgBox Obj.Name
        Exit Sub
    End If
 Next
End Sub

Пытливый, здорово,не знал про такой способ  
Изменено: МВТ - 13.11.2015 14:46:39
 
Спасибо, ребят. Все получилось!
 
Как получить имя - понятно. А как узнать индекс (присвоенный порядковый номер) умной таблицы?
 
Цитата
Как получить имя - понятно
а понятно потому, что написали как это сделать?
перебирайте ActiveSheet.ListObjects по индексу пока имя не совпадет с найденным
Изменено: Ігор Гончаренко - 07.08.2022 12:51:03
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Так мне кажется очень сложно. Мне просто нужно придумать обращение к умной таблице на листе через ее индекс. Искал что-то типа ActiveCell.ListObject.Item, но это не работает. Думал есть какой-то другой выход на этот параметр . Он же где-то зашит, как я понимаю. И обращаться к нему можно, напримерMsgBox ThisWorkbook.Worksheets(1).ListObjects(1).Name.
 
Цитата
Pelik написал:
Так мне кажется очень сложно
покажите способ проще, буду знать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
нормальный способ Игорь предложил, у вас же на листе не миллион умных таблиц

Код
Sub Test()
    Dim objList As ListObject
        
    If ActiveSheet.ListObjects.Count = 0 Then Exit Sub
    With ActiveSheet
        For Each objList In .ListObjects
            If Not Intersect(ActiveCell, objList.Range) Is Nothing Then
                MsgBox "Курсор стоит в таблице:" & vbLf & "Имя: " & objList.Name & vbLf & "Индекс: " & findIndexOfListObject(objList.Name), vbInformation, ""
                Exit Sub
            End If
        Next
    End With
    MsgBox "Курсор не стоит внутри таблицы!", vbExclamation, "Внимание"
End Sub

Private Function findIndexOfListObject(ByVal sName As String) As Long
    Dim i As Long
    With ActiveSheet
        For i = 1 To .ListObjects.Count
            If .ListObjects(i).Name = sName Then
                findIndexOfListObject = i
                Exit Function
            End If
        Next
    End With
End Function
 
Цитата
Pelik: Как получить имя - понятно. А как узнать индекс (присвоенный порядковый номер) умной таблицы?
вопрос из зала: нахрена, а, главное — зачем? У вас есть Таблица. Засуньте её в переменную и обращайтесь в любое время.
А пока выглядит так, как будто вы сознательно создаёте себе проблемы… Удачи в этом нелёгком деле  ;)
Изменено: Jack Famous - 09.08.2022 09:05:14
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
вопрос из зала: нахрена, а, главное — зачем?
Поддерживаю всеми лапами и хвостом. С одной таблицей на листе (ActiveSheet.ListObjects(1)) понятно, но остальные?
 
если активная ячейка в умной таблице
то вот она эта таблица: ActiveCell.ListObject
а для чего нужен индекс??? похоже, это загадка для всех тут (не исключая автора вопроса)
в Камеди было (в разговоре Сталина с Берией)
-- не посчитайте это прихотью, но я хочу мышью окна открывать и не смотря на советскую власть чтобы на столе были иконки... и хочу окна открывать мышью и закрывать!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
New Спасибо! То что надо!
 
Pelik, ???
на вопрос из заголовка этой темы :
Цитата
lcf2003 написал:
Как получить имя (или индекс) "умной" таблицы на которой сейчас стоит курсор?
ответ написан в сообщении 2:
Цитата
Пытливый написал:
ActiveCell.ListObject.Name
четкий короткий ответ на конкретный вопрос, все остальное к заявленной теме имеет мало отношения
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх