Excel 定义列中从顶部到最后使用的单元格的范围

Excel 定义列中从顶部到最后使用的单元格的范围,excel,vba,Excel,Vba,我试图定义一个范围,从列的顶部到该列中最后填充的单元格,但由于某种原因,当我做出此声明时,它会给我一个对象定义的错误,我真的很困惑为什么会发生这种情况。这是一句话: Public Sub SomeRange Set rng1 = Sheets("FuzzyLookup_AddIn_Undo_Sheet")._ Range(Range("B2"), Range("B2").End(xlDown)) End Sub 我是vba的新手,所以这里的任何人都能提供帮助,我将不胜感激 Se

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

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)
您必须使用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
结果:

范围(“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”作为一个显式变量放入,它使查看代码变得简单。此外,使用“Range(“B”)和Cells.Rows.Count.End(xlUp.Row)”增加的复杂性使您能够向后兼容旧版本的Excel,如果行数被限制在略高于64k行。

+1和@user3034460,如果您还没有准备好,它也将有助于
将rng1变暗为范围
。请在回答中注意,这不适用于2003及以下版本,因为您使用的是
B1048576
。仅在2007年以后才引入了对100多万行的支持。