在列中定义从上到下使用的单元格的范围

我想定义从列的顶部到该列中最后一个填充的单元格的范围,但由于某种原因,当我做这个声明时,它给了我一个对象定义的错误,我真的很困惑,为什么发生这种情况。 这是行:

Public Sub SomeRange Set rng1 = Sheets("FuzzyLookup_AddIn_Undo_Sheet")._ Range(Range("B2"), Range("B2").End(xlDown)) End Sub 

我相当新vba,所以任何人在这里可以提供任何帮助将不胜感激。

 Set rng1 = ThisWorkbook.Sheets("FuzzyLookup_AddIn_Undo_Sheet"). _ Range("B2", Thisworkbook.Sheets("FuzzyLookup_AddIn_Undo_Sheet"). _ Range("B1048576").End(xlup).Address) 

您必须使用地址,并且应该始终标识当前工作簿,以便它不会自动默认。 你也应该使用从底部的xlup,因为你有一个空白。

尝试这个:

 Sub GetLastRow() Dim WS As Worksheet Dim Rng1 As Range Set WS = ThisWorkbook.Sheets("FuzzyLookup_AddIn_Undo_Sheet") With WS Set Rng1 = .Range("B2:B" & .Range("B" & .Rows.Count).End(xlUp).Row) End With MsgBox Rng1.Address End Sub 

结果:

在这里输入图像说明

Range("B2:B" & ActiveSheet.UsedRange.rows.count)是我最喜欢的,但它可能包括空白单元格,如果它们已被用户格式化(如突出显示)

如果你没有格式化单元格,我会使用这个方法。 无论如何,最好使用UsedRange比全行数(即使使用xlup)

cronos方法的替代方法:

 Public Sub SomeRange With Sheets("FuzzyLookup_AddIn_Undo_Sheet") lastRow = Range("B" & Cells.Rows.Count).End(xlUp).Row Set rng1 = .Range("B2:B" & lastRow) End With End Sub 

我更喜欢把“lastRow”作为一个显式variables,这使得审查代码变得简单。 另外,使用“Range(”B“&Cells.Rows.Count).End(xlUp).Row”增加的复杂性,使您可以向后兼容旧版本的Excel,其行数仅限于超过64k行。