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多万行的支持。