2016-02-22 3 views
3

Я новичок в программировании и изучаю основы VBA с помощью макрорекордера. Я работаю над небольшим проектом VBA и должен скопировать данные из столбца C, листа 2 и пол.H, лист 1, а затем вставить их как один столбец на листе 3, столбец A. Первая часть была простой. Я скопировал из Col C на листе 2 в столбик A на листе 3. Вторая часть копирует из Col.H на листе 1, а затем набирает следующую доступную строку на Col A на листе 3. Мой вопрос заключается в том, как получить мой макрос для вставки скопированных данных в следующую доступную строку на листе 3, Col A? Я пытаюсь отлаживать и похоже, что проблема заключается в выборе следующей пустой строки. Это не похоже на Cells.NextRow.Select - это правильный синтаксис, даже если определено NextRow. Вот мой код:Вставка следующей строки в другую таблицу

Sub Macro2() 

' copy from Sheet2 

Sheets("Sheet2").Select 

Range("C7").Select 

Range(Selection, Selection.End(xlDown)).Select 

Selection.Copy 

' paste on Sheet3 

Sheets("Sheet3").Select 

Range("A1").Select 

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 

:=False, Transpose:=False 

' copy from Sheet1 

Sheets("Sheet1").Select 

Range("H2").Select 

Range(Selection, Selection.End(xlDown)).Select 

Application.CutCopyMode = False 

Selection.Copy 

' paste on Sheet3 

Sheets("Sheet3").Select 

NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 

**Cells.NextRow.Select** 

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 

:=False, Transpose:=False 

End Sub 

FYI листы 1 и 2 имеют заголовки столбцов на строках 1 и 6, соответственно. Я не хочу, чтобы они были скопированы, поэтому я жестко закодировал исходную точку диапазона, который нужно скопировать. Моя переменная «NextRow», похоже, работает, когда я отлаживаю, но, похоже, проблема связана с фактическим выбором следующей доступной строки.

ответ

1

NextRow - это номер не Range().

Sheets("Sheet3").Range("A" & NextRow).Select 

Но вы должны действительно очистить свой код и не использовать .Select. Я буду работать над редактированием, чтобы помочь.

Sub Macro2() 

' copy from Sheet2 
    With Sheets("Sheet2") 
     .Range(.Range("C7"), .Range("C7").End(xlDown)).Copy 
    End With 

' paste on Sheet3 
    Sheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

' copy from Sheet1 
    With Sheets("Sheet1") 
     .Range(.Range("H2"), .Range("H2").End(xlDown)).Copy 
    End With 

' paste on Sheet3 
    With Sheets("Sheet3") 
     NextRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 
     .Range("A" & NextRow)..PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    End With 

End Sub 
+0

Если это сработает для вас. Примите зеленую галочку. – Chrismas007

+0

Спасибо! Сейчас работает как шарм. Быстрый вопрос: почему я должен избегать использования .select? – MilesToGoBeforeISleep

+1

@MilesToGoBeforeISleep См. Http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros, поскольку это может привести к плохой ссылке при работе и фактически добавляет дополнительный код. – Chrismas007