我试图通过向下查看下一个使用值的列的行来调整范围,但是我得到一个对象定义的错误。有什么想法吗?
Set vrng = ActiveSheet.Range("details_table").Find(sest, , xlValues, xlWhole)
Set vrng = vrng.Resize(vrng.End(xlDown).Row)
答案 0 :(得分:0)
如果不起作用,请删除第二行末尾的.row,然后尝试
Set vrng = Range(vrng,vrng.end(xldown))
答案 1 :(得分:0)
Sub test()
Dim vrng As Range
Set vrng = Range("Compannies").Find(what:="Delta", LookIn:=xlValues, lookat:=xlWhole)
Set vrng = vrng.Resize(vrng.Rows.End(xlDown).Row)
vrng.Select
End Sub
您只需确保在vrng.rows
之前使用.End(xldown)
。
但是,我建议将第一个变量的名称更改为sestCell
,然后使用Set vrng = sestCell.Resize(sestcell.Rows.End(xldown).Row)
以避免混淆。
它正在做的是,你的Find
将返回一个小区范围(特别是一个小区地址)。然后,由于您要将该范围向下扩展,您需要指定要扩展范围的行:.Resize(vrng.rows.End(xldown).Row)
。
答案 2 :(得分:0)
如果vrng
之后没有其他数据,则.End(xlDown).Row
将返回工作表中的行数。假设vrng
是A100:
Set vrng = Range("A100")
'// There is no data below vrng, so:
nextRow = vrng.End(xlDown).Row '// Returns 65,536 (pretend it's XL97)
vrng.Resize(nextRow) '// <~~ This will error
Resize()
方法扩展给定的范围对象,所以如果我们从A100开始并扩展65,536行,那么A65636就不存在了,所以发生错误。
我建议使用Immediate If来管理:
Set vrng = vrng.Resize(IIf(vrng.End(xlDown).Row = Rows.Count, vrng.Rows.Count, vrng.End(xlDown).Row - vrow.Cells(1).Row)
如果您不熟悉Immediate If,那么常规If块将起作用:
If Not vrng.End(xlDown).Row = Rows.Count Then
Set vrng = vrng.Resize(vrng.End(xlDown).Row - vrng.Cells(1).Row, )
End If