查找列中包含内容的最后一个单元格->为什么我的代码版本给出错误?

时间:2019-01-10 23:27:07

标签: excel vba

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

其他问题:

  1. 在第一个版本中,“设置”的作用是什么?我为什么需要这个?

在线程中找到代码:

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

2 个答案:

答案 0 :(得分:1)

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

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

如果您需要“ 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

答案 1 :(得分:1)

您的代码未执行的原因是由于Sheets("Database_UtilAnal").Cells(.Rows.Count, "B").End(xlUp)

失败的片段是 .rows.Count

想象这的最好方法是可视化With语句。出于各种原因,您可以说With语句会将所述语句的参数附加到任何前导“。”。

也就是说

With ThisWorkbook.Worksheets(1)
    .Range("A1")
End With

相同
ThisWorkbook.Worksheets(1).Range("A1")

那么Sheets("Database_UtilAnal").Cells(.Rows.Count, "B").End(xlUp)为什么不能成功执行?

注意开头的“。”在.Rows.Count。如果没有With语句,编译器将看不到任何要追加的内容,因此无法执行。

编辑:

Set关键字用于将对象(例如Range("A1"))分配给某些非原始数据类型(例如Range)。