我正在尝试定义从列顶部到该列中最后一个填充单元格的范围但由于某种原因,当我发出此声明时,它会给我一个对象定义错误,我真的很困惑为什么会发生这种情况。这是一行:
Public Sub SomeRange
Set rng1 = Sheets("FuzzyLookup_AddIn_Undo_Sheet")._
Range(Range("B2"), Range("B2").End(xlDown))
End Sub
我对vba很新,所以任何人都可以提供任何帮助都会受到高度赞赏。
答案 0 :(得分:2)
Set rng1 = ThisWorkbook.Sheets("FuzzyLookup_AddIn_Undo_Sheet"). _
Range("B2", Thisworkbook.Sheets("FuzzyLookup_AddIn_Undo_Sheet"). _
Range("B1048576").End(xlup).Address)
您必须使用地址,并且应始终识别当前工作簿,以使其不会自动默认。你也应该从底部使用xlup,因为你有一个空白。
答案 1 :(得分:0)
试试这个:
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
<强>结果:强>
答案 2 :(得分:0)
Range("B2:B" & ActiveSheet.UsedRange.rows.count)
是我最喜欢的,但如果用户已将其格式化,则可能包含空白单元格(如前突出显示)
如果你没有格式化单元格,我会使用这种方法。无论如何,从UsedRange开始比使用完整行数更好(即使使用xlup)
答案 3 :(得分:0)
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“&amp; Cells.Rows.Count).End(xlUp).Row”增加的复杂性使您向后兼容旧版本的Excel,其中行数限制为超过64k行