Код ниже пытается вставить выбранный диапазон (переданный как rng
) в конец рабочего листа. Он работает, если уже имеется 2 ряда (A1, A2).Excel vba - xlDown
Sub copyRow(rng As Range, ws As Worksheet)
Dim newRange As Range
Set newRange = ws.Range("A1").End(xlDown).Offset(1, 0)
rng.Copy
newRange.PasteSpecial (xlPasteAll)
End Sub
Итак, если присутствуют A1 и A2, и если вы вызываете этот метод 100 раз, он вставляет по 100 строк после них. Но, если строк нет или только A1, он просто перезаписывает A2. Я мог видеть, что Excel записывается в той же строке (переписывать)
Появляется, что-то связано с тем, как xlDown вычисляет, если есть менее 2 строк, не уверен.
Любая помощь будет оценена по достоинству.
+1 за красивое объяснение. Как бы то ни было, я никогда не поддерживал использование «ws.Range (« A1 »). End (xlDown)» для установки диапазона. Причина в том, что она не дает (вполне понятно) правильного диапазона, если между ними есть пустая ячейка. :) –
Тони, спасибо за помощь ур. Это сработало для меня. Что касается первой части, почему я так делал, я шел по пункту 18 http://support.microsoft.com/kb/291308. Удивлен, чтобы не было простого способа сделать это. спасибо ага. – bsr
@SiddharthRout .. или хуже последней ячейки, если строка пуста. Взгляд вверх намного лучше, но все же необходим тест для обеспечения того, чтобы диапазон данных не был пустым. ['Find' может быть проще] (http://stackoverflow.com/q/4872512/641067) в зависимости от того, что необходимо – brettdj