Получить используемый диапазон в столбце таблицы ListObject - PullRequest
0 голосов
/ 12 июня 2019

Я использую этот код, чтобы получить используемый диапазон в столбце таблицы Listobject, но мне было интересно, есть ли лучший способ сделать это с Listobjects, так как этот код подвержен ошибкам.

Dim Lastrow As Integer
Dim rng as Range

Lastrow = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
Set rng = Range("B12:B" & Lastrow)

Ответы [ 3 ]

1 голос
/ 12 июня 2019

Следующее выберет диапазон ваших данных в столбце таблицы 2

Dim tbl as ListObject
Dim rng as Range

set tbl = ActiveSheet.ListObjects("YourTableName")

set rng = tbl.ListColumns(2).DataBodyRange

Здесь приведено очень подробное руководство по выбору различных частей объекта ListObject

╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
║                                      Selecting Areas Of A Table With VBA                                     ║
╠══════════════════════════════════════╦═══════════════════════════════════════════════════════════════════════╣
║                Select                ║                               VBA Coding                              ║
╠══════════════════════════════════════╬═══════════════════════════════════════════════════════════════════════╣
║ Entire Table                         ║ ActiveSheet.ListObjects("Table1").Range.Select                        ║
╠══════════════════════════════════════╬═══════════════════════════════════════════════════════════════════════╣
║ Table Header Row                     ║ ActiveSheet.ListObjects("Table1").HeaderRowRange.Select               ║
╠══════════════════════════════════════╬═══════════════════════════════════════════════════════════════════════╣
║ Table Data                           ║ ActiveSheet.ListObjects("Table1").DataBodyRange.Select                ║
╠══════════════════════════════════════╬═══════════════════════════════════════════════════════════════════════╣
║ Third Column                         ║ ActiveSheet.ListObjects("Table1").ListColumns(3).Range.Select         ║
╠══════════════════════════════════════╬═══════════════════════════════════════════════════════════════════════╣
║ Third Column (Data Only)             ║ ActiveSheet.ListObjects("Table1").ListColumns(3).DataBodyRange.Select ║
╠══════════════════════════════════════╬═══════════════════════════════════════════════════════════════════════╣
║ Select Row 4 of Table Data           ║ ActiveSheet.ListObjects("Table1").ListRows(4).Range.Select            ║
╠══════════════════════════════════════╬═══════════════════════════════════════════════════════════════════════╣
║ Select 3rd Heading                   ║ ActiveSheet.ListObjects("Table1").HeaderRowRange(3).Select            ║
╠══════════════════════════════════════╬═══════════════════════════════════════════════════════════════════════╣
║ Select Data point in Row 3, Column 2 ║ ActiveSheet.ListObjects("Table1").DataBodyRange(3,                    ║
║                                      ║   2).Select                                                           ║
╠══════════════════════════════════════╬═══════════════════════════════════════════════════════════════════════╣
║ Subtotals                            ║ ActiveSheet.ListObjects("Table1").TotalsRowRange.Select               ║
║                                      ║                                                                       ║
╚══════════════════════════════════════╩═══════════════════════════════════════════════════════════════════════╝
0 голосов
/ 12 июня 2019
Sub F()
    Dim tbl As ListObject
    Dim col As ListColumn
    Set tbl = ActiveSheet.ListObjects("Table1")
    Set col = tbl.ListColumns(2)
End Sub
0 голосов
/ 12 июня 2019

Таким образом, вы избежите любых ошибок, потому что ваши ошибки происходят от ActiveSheet, которые могут отличаться, если пользователь взаимодействует:

Dim Lastrow As Long 'don't use Integer is a Long cut to the integer
Dim rng As Range

With ThisWorkbook.Sheets("MySheet") 'Change MySheet to your working sheet name
    Lastrow = .Cells(.Rows.Count, 2).End(xlUp).Row
    Set rng = .Range("B12:B" & Lastrow)
End With

Таким образом, все ваши данные будут поступать с листа MySheet как LastRow, так и rng. Вы можете заметить, что я использую точку перед Cells, Rows.count и Range. Это означает, что он ссылается на лист в строке: With ThisWorkbook.Sheets("MySheet")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...