首页 文章

VBA,使用LastRow选择查找LastCol

提问于
浏览
0

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

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

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

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

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

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

    LastRow = Worksheets("Summary PNL (bpnl by bucket)").UsedRange.SpecialCells(xlCellTypeLastCell).row
    
  • -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
    

相关问题