2015-11-09 2 views
2

У меня есть форма, в которой вы заполняете материал, а часть его должна быть скопирована на другой лист в конце списка.Вставить скопированные материалы в самом конце строки

With Sheets("Sheet1") 
If Application.WorksheetFunction.CountA(.Columns(2)) <> 0 Then 
    lastrow = .Cells(rows.Count, "B").End(xlUp).Row 
Else 
    lastrow = 1 
End If 
.Cells(lastrow + 1, "B") = "my new value" 
End With 

У меня есть этот код, чтобы найти последнюю строку и вставить/написать «мое новое значение» в ней. Но мне нужно, чтобы он вставлял больше, чем одну ячейку. Мне просто нужно, чтобы он выбирал ту часть, где он записывал «мое новое значение». Я должен быть в состоянии сделать все остальное Теперь я использую код ниже. Но он все еще копирует материал из листа «Tabelle3», но он должен копировать материал из листа «Tabelle2»

Private Sub CommandButton1_Click() 
    Dim lastRow As Long 

    With Sheets("Tabelle3") 
     If Application.WorksheetFunction.CountA(.Columns(1)) <> 0 Then 
      lastRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1 '<~~ Add 1 here and not as you are doing 
     Else 
      lastRow = 1 
     End If 

     Sheets("Tabelle2").Select 
     Range("B85:S85").copy 
     Sheets("Tabelle3").Select 

     '~~> Paste special 
     .Range("C" & lastRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    End With 
End Sub 
+0

Если вы хотите, чтобы только одно значение было вставлено в несколько ячеек, сначала определите, какой диапазон (скажем, вы хотите вставить в 5 ячеек), а затем просто используйте '.Range (« B »& Lastrow &»: B "& lastrow + 5) .value = textbox1.text' –

ответ

2

Вы должны найти последнюю пустую строку, а затем просто сделать пасту или pastespecial, как показано ниже.

Sub Sample() 
    Dim lastRow As Long 

    With Sheets("Sheet1") 
     If Application.WorksheetFunction.CountA(.Columns(2)) <> 0 Then 
      lastRow = .Cells(Rows.Count, "B").End(xlUp).Row + 1 '<~~ Add 1 here and not as you are doing 
     Else 
      lastRow = 1 
     End If 

     Range("Z10:Z100").Copy 

     '~~> Paste special 
     .Range("B" & lastRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    End With 
End Sub 

Приведенный выше код будет копировать диапазон "Z10:Z100" и сделать pastespecial на следующей строке в Col B. Если вы не хотите, чтобы сделать pastespecial и хотите сделать прямую пасту затем увидеть этот

Sub Sample() 
    Dim lastRow As Long 

    With Sheets("Sheet1") 
     If Application.WorksheetFunction.CountA(.Columns(2)) <> 0 Then 
      lastRow = .Cells(Rows.Count, "B").End(xlUp).Row + 1 '<~~ Add 1 here and not as you are doing 
     Else 
      lastRow = 1 
     End If 

     Range("Z10:Z100").Copy .Range("B" & lastRow) 
    End With 
End Sub 
+0

Он отлично работает, но копирует его с неправильного листа? (Новый код в вопросе) – Swi

+0

Да, это потому, что вы не полностью квалифицировали объект диапазона. Изменить «Диапазон (« B85: S85 »). Copy' to' Таблицы («Tabelle2»). Диапазон («B85: S85»). Copy' :) Также вы можете прочитать [ЭТО] (http: // stackoverflow .com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) –

+0

Спасибо, Сиддхарт! многому научились сегодня! благодаря вам! – Swi

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