VBA,使用LastRow + Select查找LastCol

时间:2016-10-12 16:10:12

标签: excel vba excel-vba

我有一个宏,它当前在工作表上找到最后一行,将其与定义的最后一列和起始单元格配对,然后选择所有这些行进行打印。

Set Sheet = Worksheets("Summary PNL (bpnl by bucket)")
Set StartCell = Range("A9")
LastRow = Sheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Sheet.Range("A9:I" & LastRow).Select

我现在正处理动态列以及动态行。理论上这不是一个困难的添加,但是第9行只有A列中的数据(范围A9),B到I(示例结束列)在该行上是空白的。有什么见解吗?

2 个答案:

答案 0 :(得分:0)

如果您确定要打印所有非空或未格式化的单元格,可以使用:

Worksheets("Summary PNL (bpnl by bucket)").UsedRange.Select

这将选择所有使用的范围。

无论如何,要查找最后一个单元格,可以将此属性与specialcells方法一起使用,如下所示:

LastRow = Worksheets("Summary PNL (bpnl by bucket)").UsedRange.SpecialCells(xlCellTypeLastCell).row

答案 1 :(得分:-1)

而不是查找最后一行查找最后一个单元格。然后,您所要做的就是选择第一个单元格和最后一个单元格之间的所有内容。

如果工作表上没有任何内容,则会失败,因为它会尝试引用第0行和第0列(Method 'Range' of object '_Worksheet' failed)。

我建议先使用一个函数来找到最后一个单元格 - 即使工作表为空,也会返回一个范围对象。这里有很多例子。

Sub test()

    Dim Sheet As Worksheet
    Dim StartCell As Range
    Dim LastCell As Range

    Set Sheet = Worksheets("Summary PNL (bpnl by bucket)")
    Set StartCell = Range("A9")
    Set LastCell = Sheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
    Sheet.Range(StartCell, LastCell).Select

End Sub