Извините, но я не согласен с ответом Майкла.
Конец (xlDown) - это эквивалент VBA нажатия Ctrl
+ Down
.
Попробуйте Ctrl
+ Down
с
- пустой столбец
- столбец со значением в строке 1, но без других
- значения в строках 1 и 2
- значения в строках 1, 2, 3, 7, 8, 9, 13, 14 и 15
Это даст вам представление обо всех различных строках, Ctrl
+ Down
может привести вас к.
Set newRange = ws.Range("A1").End(xlDown).End(xlDown).End(xlUp).Offset(1, 0)
не обязательно приведет вас к последней использованной строке плюс 1.
Я удивлен Set newRange = ws.Range("A1").End(xlDown).Offset(1, 0)
работал с пустым столбцом. Range("A1").End(xlDown)
приведет вас к нижнему ряду листа, а .Offset(1, 0)
попытается оторвать вас от листа.
Рассмотрим:
Dim RowLast As Long
RowLast = ws.Cells(Rows.Count, "A").End(xlUp).Row
- Если столбец A пуст, для RowLast будет установлено значение 1.
- Если A1 имеет значение, но другие ячейки не имеют значений, для RowLast будет установлено значение 1.
- Если количество ячеек в столбце A имеет значения, RowLast будет установлен в нижний ряд со значением.
- Если у вас есть значение в последнем ряду, оно будет проигнорировано.
- Если у вас есть значение в последних двух строках, RowLast будет установлен в Rows.Count - 1.
Полагаю, у вас нет значений в строках. Если вам все равно, если строка 1 остается пустой с пустым столбцом, то:
RowLast = ws.Cells(Rows.Count, "A").End(xlUp).Row
Set NewRange = ws.Cells(RowLast + 1, "A")
должен дать желаемый результат независимо от текущего содержимого листа ws.
Если вам важно, чтобы строка 1 оставалась пустой, экспериментирование с Ctrl
+ Down
и Ctrl
+ Up
даст вам представление о влиянии различных комбинаций значений.