2016-11-04 5 views
0

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

У меня есть очень простой макрос, который будет искать слово PASS в колонке C на моем первом листе, а затем скопировать всю строку на вторичный лист, который также называется PASS.

Я пытаюсь копировать и вставлять данные в эту строку из столбцов A:E. Ниже мой текущий код. Я попытался добавить .range("A:E"), но потом ничего не делает.

Любая помощь в том, как получить это, только для копирования информации в столбцах A-E для этой конкретной строки.

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim C As Range 

    If Intersect(Target, Me.Range("C:C")) Is Nothing Then Exit Sub 
    For Each C In Intersect(Target, Me.Range("C:C")).Cells 
    If C.Text = "PASS" Then 
     C.EntireRow.Copy Worksheets("PASS").Cells(Rows.Count, "C").End(xlUp).Offset(1).EntireRow 
    End If 
    Next 
End Sub 
+0

Вы должны указать номер строки, а также столбец при ссылках на диапазоны. 'range (" A: E ")' определяет только столбцы. Он должен быть чем-то вроде «range (« a54: e54 »). –

+0

@Scott Marcus - вы можете ссылаться на целые столбцы, хотя это и не эффективно. – SJR

ответ

0

Попробуйте

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim C As Range 

    If Intersect(Target, Me.Range("C:C")) Is Nothing Then Exit Sub 
    For Each C In Intersect(Target, Me.Range("C:C")).Cells 
    If C.Text = "PASS" Then 
     cells(C.Row,1).resize(,5).Copy Worksheets("PASS").Cells(Rows.Count, "C").End(xlUp).Offset(1).EntireRow 
    End If 
    Next 
End Sub 
+0

Это прекрасно работает. Спасибо огромное! –

1

Я адаптировать свой код и изменил следующие:

  • определили некоторые Range переменные, чтобы сохранить код простой
  • , если изменение было в колонке C, то ячейка Target дает нам строку
  • найти целевую строку на PASS листе, получая последнюю строку +-
  • определить данные, которые должны быть скопировано с использованием ряда Target, но столбцов A к E
  • получить первую ячейку целевого диапазона, а затем сделать копия

Вот код:

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim rngSource As Range 
    Dim lngTargetRow As Long 
    Dim rngTarget As Range 

    'was change in column C ? 
    If Intersect(Target, Me.Range("C:C")) Is Nothing Then 
     Exit Sub 
    End If 

    'change was in column C - was PASS entered 
    If Target.Text = "PASS" Then 
     'get row to copy to on PASS sheet 
     lngTargetRow = Worksheets("PASS").Cells(Rows.Count, "C").End(xlUp).Row + 1 
     'get source range 
     Set rngSource = Me.Range("A" & Target.Row & ":E" & Target.Row) 
     'set target range 
     Set rngTarget = Worksheets("PASS").Cells(lngTargetRow, 1) 
     'do the copy 
     rngSource.Copy Destination:=rngTarget 
    End If 

End Sub 
+0

Благодарим за помощь. Это также работает! Я собираюсь пойти с первым ответом от SJR, потому что, будучи новичком, он имеет больше смысла, и я могу следить за кодом и понимать его. Это лишь малая часть моего макроса, поэтому я хочу сохранить его как можно более простым. –

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