Во время копирования вы пытаетесь скопировать определенный диапазон. Поэтому вместо использования:
Source.Rows(c.Row).Copy Target.Rows(j)
Используйте
Source.Range("E*row*:Q*row*").Copy Target.Rows(j)
Где *row*
- номер строки. Таким образом, вы можете скопировать Range из столбцов E в Q, сохранив фиксированный номер строки.
Итак, окончательный код
Sub Button2_Click()
Dim c As Range
Dim r As String 'Store the range here
Dim j As Integer
Dim Source As Worksheet
Dim Target As Worksheet
' Change worksheet designations as needed
Set Source = ActiveWorkbook.Worksheets("SheetA")
Set Target = ActiveWorkbook.Worksheets("SheetB")
j = 3 ' Start copying to row 3 in target sheet
For Each c In Source.Range("O10:O15") ' Do 1500 rows
If c = "Open" Then
r = "E" & c.Row & ":" & "Q" & c.Row 'Creating the range
Source.Range(r).Copy Target.Rows(j)
j = j + 1
End If
Next c
End Sub
Надеюсь, это поможет!