2012-11-27 3 views
0

Я пытаюсь выяснить код, чтобы удалить все строки после последней строки из моих скопированных данныхVBA - Удалить все строки после последней строки в скопированных данных

Я копирование данных из рабочего листа А до рабочего листа B. Рабочий лист B уже имеет в нем данные. если количество строк в листе A меньше рабочего листа B, я хочу удалить все строки, которые не были скопированы в рабочий лист B с рабочего листа A.

EG: Рабочий лист A = 50 строк Рабочий лист B = 60 строк. скопировать лист А рабочим лист B, я хочу, чтобы удалить 10 строк, которые не являются частью рабочего листа А.

Вот мой код до сих пор:

Dim shCurrentWeek As Worksheet 
Dim shPriorWeek As Worksheet 
Dim lr3 As Long 

Set shCurrentWeek = ActiveWorkbook.Sheets("Current Week") 
Set shPriorWeek = ActiveWorkbook.Sheets("Prior Week") 
lr3 = shPriorWeek.Range(Rows.Count, "A").End(xlUp).Row 

'Copies necessary rows in CurrentWeek tab to PriorWeek tab 
shCurrentWeek.Range("A4:X" & lr).Copy shPriorWeek.Range("A2") 
shPriorWeek.Range("A4:X" & lr3 + 1 & ":A" & Rows.Count).EntireRow.Delete 

Я относительно уверен, что мой LR3 установлен неправильный ... не уверен, как исправить.

спасибо!

+2

почему бы вам просто не очистить содержимое, прежде чем вставлять новые данные? – scott

+0

влияет на формулы в рабочем листе A, которые основаны на данных на рабочем листе. B – kmiao91

ответ

2

Так как ваш код говорит, что shCurrentWeek.Range("A4:X" & lr).Copy shPriorWeek.Range("A2") (Другие слова, вы копируете из [начиная строку 4] [начиная строку 2]) вы можете просто забыть о lr3 и сделайте следующее (я считаю):

shCurrentWeek.Range("A4:X" & lr).Copy shPriorWeek.Range("A2") 
shPriorWeek.Range("A" & lr-2 & ":A10000").EntireRow.Delete 

Надеется, что это помогает

+0

Я ранее определял lr, относящийся к другому листу. – kmiao91

+0

... Я не понимаю, что это имеет к чему-либо - вы копируете с «A4» на «X» и lr' и вставляете srarting в «A2» ', поэтому вам нужно удалить из' lr-2', нет ??? –

+0

Я полагаю, что это имеет смысл ... но я попытался сделать код, и я придумал ошибку: 'Метод 'range' объекта'_Worksheet 'failed'. Только для справки: 'lr = shCurrentWeek.Range (« A »& Rows.Count) .End (xlUp) .Row' – kmiao91

1

вы хотите lr3 быть номером строки последней строки (не смещение по сравнению с вашими вставленными данными:

lr3 = shPriorWeek.Rows.Count 

Затем ВЕИТ следует читать:

shPriorWeek.Range("A4:A" & lr3).EntireRow.Delete 

В качестве альтернативы первого клирингового THEN склейка (как предложено в комментариях) также является хорошим способом и очень чиста.

+0

. Мой исходный код очищал содержимое, но формулы становятся затронутыми, и данные становятся неправильными. К сожалению, ваш код выше не работает для меня, поскольку он удаляет все строки. – kmiao91

Смежные вопросы