在ListObject表列

时间:2019-06-12 10:29:35

标签: excel vba

我正在使用此代码在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)

4 个答案:

答案 0 :(得分:1)

以下内容将在表第2列中选择数据范围

Dim tbl as ListObject
Dim rng as Range

set tbl = ActiveSheet.ListObjects("YourTableName")

set rng = tbl.ListColumns(2).DataBodyRange

关于如何选择ListObject here

的不同部分,有非常全面的指南
╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
║                                      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               ║
║                                      ║                                                                       ║
╚══════════════════════════════════════╩═══════════════════════════════════════════════════════════════════════╝

答案 1 :(得分:0)

像这样,您将避免任何错误,因为您的错误来自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

这样,您所有的数据都将来自MySheetLastRow的工作表rng。您可能会注意到我在CellsRows.countRange前面使用了一个点。这意味着它正在引用工作表:With ThisWorkbook.Sheets("MySheet")

答案 2 :(得分:0)

Sub F()
    Dim tbl As ListObject
    Dim col As ListColumn
    Set tbl = ActiveSheet.ListObjects("Table1")
    Set col = tbl.ListColumns(2)
End Sub

答案 3 :(得分:0)

我正在使用这个:

Dim lastrow as Long, tbl As ListObject
With Sheets("Sheet1")
    Set tbl = .ListObjects("MyTable")
    With tbl
        'Siddharth Rout, Feb 2018
        'http://www.siddharthrout.com/index.php/2018/02/10/find-last-row-and-last-column/
        'https://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba
        lastrow = .ListColumns(1).Range.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        .DataBodyRange(lastrow, 1).Resize(1, 3) = Array(Date, "some text", "some text")
    End With
    Set tbl = Nothing
End With