2014-10-15 3 views
0

У меня есть следующий код VBA, который берет одну строку из данных с листом, копирует данные, а затем вставляет данные в следующую доступную строку в списке «Листинг». Однако исходная строка имеет формулы, и мне нужны значения для вставки, а не формулы. Я видел множество способов сделать это с помощью Range.PasteSpecial, но этот код не использовал Range, и я не уверен, как его включить.Используйте VBA для вставки значений из одной таблицы в другую

Примечание: я изменил этот код отсюда: http://msdn.microsoft.com/en-us/library/office/ff837760(v=office.15).aspx. Первоначально он имел оператор If для соответствия содержимому в ячейке, а затем вставлял его в определенный лист в соответствии с содержимым ячейки. У меня был только один лист для копирования и не нужен IF. Мне действительно не нужно находить последнюю строку данных для копирования, поскольку она будет только когда-либо одной строкой с диапазоном A2: N2. Но если я выберу раздел FinalRow и For и замените его диапазоном («A2: N2»), он не работает, поэтому я оставил их.

Любые указания по добавлению в свойстве PasteValues ​​без создания это более сложное, я бы очень признателен! Я также открыт для упрощения переменной For или FinalRow, например, с помощью Range. Я только знакомы с VBA, выполнив несколько вещей с ним, но обычно после многого поиска и изменения кода. Благодаря!

Public Sub CopyData() 
Sheets("Tabled data").Select 
' Find the last row of data 
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row 
' Loop through each row 
For x = 2 To FinalRow 
    ThisValue = Cells(x, 1).Value 
    Cells(x, 1).Resize(1, 14).Copy 
    Sheets("Running list").Select 
    NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 
    Cells(NextRow, 1).Select 
    ActiveSheet.Paste 
    Sheets("Tabled data").Select 
Next x 

End Sub

ответ

0

Надеется, что мы можем на самом деле сделать это более простым.

Public Sub CopyRows() 
    Sheets("Sheet1").UsedRange.Copy 
    lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 

    'check if the last cell found is empty 
    If IsEmpty(ActiveSheet.Cells(lastrow, 1)) = True Then 
     'if it is empty, then we should fill it 
     nextrow = lastrow 
    Else 
     'if it is not empty, then we should not overwrite it 
     nextrow = lastrow + 1 
    End If 

    ActiveSheet.Cells(nextrow, 1).Select 
    ActiveSheet.Paste 
End Sub 

редактировать: Я расширил его немного, так что не будет пустая строка в верхней

0

я нашел рабочий раствор. Я записал макрос, чтобы получить специальную пасту там, и добавил дополнительный код, чтобы найти следующую пустую строку:

Sub Save_Results() 
' Save_Results Macro 
    Sheets("Summary").Select 'renamed sheets for clarification, this was 'Tabled data' 
'copy the row 
    Range("Table1[Dataset Name]").Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Selection.Copy 
' paste values into the next empty row 
    Sheets("Assessment Results").Select 
    Range("A2").Select 
    NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 
    Cells(NextRow, 1).Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
' Return to main sheet  
Sheets("Data Assessment Tool").Select 
End Sub 
Смежные вопросы