Страницы: 1
RSS
Определить количество строк в умной таблице vba
 
Добрый день!
Пытаюсь посчитать количество строк в умной таблице. Подскажите, пожалуйста, почему строка выдает ошибку 438?
Код
LastRow = Workbooks("Книга1.xlsm").Worksheets("Лист1").ListObject("Таблица1").ListRows.Count
Изменено: Елена Дроздова - 15.06.2022 11:13:39
 
Елена Дроздова, здравствуйте
Цитата
Елена Дроздова: количество строк в умной таблице
без шапки и итогов:
Workbooks("Книга1.xlsm").Worksheets("Лист1").ListObjects("Таблица1").ListRows.Count или
Workbooks("Книга1.xlsm").Worksheets("Лист1").ListObjects("Таблица1").DataBodyRange.Rows.Count

Справка
Изменено: Jack Famous - 15.06.2022 13:29:24
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, попробовала - та же ошибка
 
Елена Дроздова, значит проблема в имени книги/листа/таблицы
Для таблицы на активном листе: ActiveSheet.ListObjects(1).DataBodyRange.Rows.Count
Изменено: Jack Famous - 15.06.2022 12:24:30
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, не работает. А если мне макросом понадобится открыть другую таблицу и посчитать строки там, то как ссылаться? Все время активировать нужный лист?
 
Код
Workbooks("Книга1.xlsm").Worksheets("Лист1").ListObjects("Таблица1").ListRows.Count
Изменено: RAN - 15.06.2022 11:50:12
 
Елена Дроздова, можно еще использовать SQL запрос (добавил в ознакомительных целях)
код:

Код
Sub Macro()
Dim myConnect As String, mySQL As String, myRecord As Object

    DataRange = "[" & ActiveWorkbook.Sheets(1).Name & "$" & strAddress & "]"
        myConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
           "Data Source=" & ActiveWorkbook.FullName & ";" & _
           "Extended Properties=""Excel 12.0;HDR=YES"""
    
    Set myRecord = CreateObject("ADODB.Recordset")
    mySQL = "SELECT COUNT(*) FROM [Лист1$]"
    myRecord.Open mySQL, myConnect
    
[E1].CopyFromRecordset myRecord
End Sub
в ячейку E1 выводит количество строк.
или использовать Ваш макрос:
Код
Sub Макрос1()
Dim myTable As ListObject
Set myTable = Worksheets(1).ListObjects("Таблица1")
MsgBox myTable.DataBodyRange.Rows.Count
' или: (можете раскомментировать)
'    LastRow = Range("Таблица1").Rows.Count
'    MsgBox (LastRow)
End Sub
 
RAN, значит точно не в методах дело, раз ListRows.Count у вас работает - в 1ом сообщении тоже самое

UPD: ListObjects - у меня на базе ТСа та же ошибка была - поправил везде  :)
Изменено: Jack Famous - 15.06.2022 12:26:27
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Сработало вот так:
Код
Set myobj = Workbooks("Книга1.xlsm").Worksheets("Лист1").ListObjects("Таблица1")
    LastRow = myobj.ListColumns(1).DataBodyRange.Count
    MsgBox (LastRow)

По-другому никак не работает.

 
прямо уж никак))
Код
  Debug.Print myobj.ListRows.Count
  Debug.Print myobj.DataBodyRange.Rows.Count
  Debug.Print myobj.Range.Rows.Count - 1
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко: прямо уж никак
да она явно что-то не то пробовала  :D
Цитата
Ігор Гончаренко: myobj.Range.Rows.Count - 1
если есть итоги, то -2  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Вы, скорее всего, правы, но у меня не получалось  :)  
Страницы: 1
Наверх