首页 > 解决方案 > 查找列中包含内容的最后一个单元格 -> 为什么我的代码版本出错?

问题描述

我想在特定列中找到包含信息的最后一个单元格,并在另一个线程中找到了下面列出的解决方案。但是我试图在没有将“ws 定义为工作表”的情况下做到这一点。如果我这样做,编译器将不接受 .cells() 中的“.Rows”。为什么?

附加问题:

  1. 在第一个版本中,“Set”到底做了什么?为什么我需要这个?

在线程中找到的代码:

Sub testprint_UtilAnal()

Dim ws As Worksheet
Dim xrowrange As Range
Dim xrowprint As Long

Set ws = Sheets("Database_UtilAnal")
With ws
Set xrowrange = .Cells(.Rows.Count, "B").End(xlUp)
Set xrowprint = xrowrange.Rows
End With

End Sub

我的代码:

Sub testprint_UtilAnal_Alt()

Dim xrowrange As Range
Dim xrowprint As Long

xrowrange = Sheets("Database_UtilAnal").Cells(.Rows.Count, "B").End(xlUp)
xrowprint = xrowrange.Rows

End Sub

标签: excelvba

解决方案


列中的最后一个单元格/行

就像您将Set用于工作簿工作表一样,您也必须将其用于其他对象,例如范围

如果您需要“ B ”列中的最后一个单元格(对象) ,您可以使用:

Sub testprint_UtilAnal()

    Dim xRowRange As Range

    With Sheets("Database_UtilAnal")
        Set xRowRange = .Cells(.Rows.Count, "B").End(xlUp)
    End With

    Debug.Print xRowRange.Address

    Set xRowRange = Nothing

End Sub

如果你只需要最后一行(数字),你可以使用这个:

Sub testprint_UtilAnal()

    Dim xRowPrint As Long

    With Sheets("Database_UtilAnal")
        xRowPrint = .Cells(.Rows.Count, "B").End(xlUp).Row
    End With

    Debug.Print xRowPrint

End Sub

以下两个版本演示了如何通过使用另一个来获得一个:

Sub testprint_UtilAnal()

    Dim xRowPrint As Long
    Dim xRowRange As Range

    With Sheets("Database_UtilAnal")
        Set xRowRange = .Cells(.Rows.Count, "B").End(xlUp)
        xRowPrint = xRowRange.Row
    End With

    Debug.Print xRowRange.Address
    Debug.Print xRowPrint

    Set xRowRange = Nothing

End Sub

Sub testprint_UtilAnal()

    Dim xRowPrint As Long
    Dim xRowRange As Range

    With Sheets("Database_UtilAnal")
        xRowPrint = .Cells(.Rows.Count, "B").End(xlUp).Row
        Set xRowRange = .Cells(xRowPrint, "B")
    End With

    Debug.Print xRowPrint
    Debug.Print xRowRange.Address

    Set xRowRange = Nothing

End Sub

推荐阅读