我正在使用此代码在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)
答案 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
这样,您所有的数据都将来自MySheet
和LastRow
的工作表rng
。您可能会注意到我在Cells
,Rows.count
和Range
前面使用了一个点。这意味着它正在引用工作表: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