Я бы сделал это так
Вариант 1 Вы можете использовать CurrentRegion, чтобы получить диапазон.Я не уверен, что это работает для вас.
Private Sub CommandButton1_Click()
Dim rg As Range
Set rg = Range("A1").CurrentRegion
ListBox1.List = rg.Value
End Sub
Вариант 2 Или вы определяете последнюю строку, как вы сделали в своем опубликованном коде, и используете этот
Private Sub CommandButton1_Click()
Dim rg As Range
Dim lr As Long
lr = Cells(Rows.Count, 1).End(xlUp).Row
Set rg = Range("A1:R" & lr)
ListBox1.List = rg.Value
End SUb
Пожалуйста, добавьте таблицу и ссылку на пользовательскую форму по мере необходимости.
Обновление На основе использования комментария для rg в Вариант 2 в следующей строке
Set rg = Range("A" & lr & ":R" & lr)
Обновление 2 Я предположил, что строки, которые вы хотите добавить в список, идентифицируются первым столбцом, который содержит SLNo.
Private Sub CommandButton2_Click()
Dim rg As Range, rg1 As Range
Dim lr As Long
lr = Cells(Rows.Count, 1).End(xlUp).Row
Set rg = Range("A1" & ":R" & lr)
rg.AutoFilter Field:=1, Criteria1:=rg.Cells(lr, 1).Value
Set rg1 = rg.SpecialCells(xlCellTypeVisible)
' Assumption is the newly added rows are in one and therefore in the last area
Set rg1 = rg1.Areas(rg1.Areas.Count)
ListBox1.ColumnCount = rg.Columns.Count
ListBox1.List = rg1.Value
rg.AutoFilter
End Sub