Даже если вы говорите, что ваш код копируется с одного листа на другой, я не могу найти другой лист, вы копируете с того же листа несколько строк ниже.
Во всяком случае, я исправилваш код, поэтому он не будет использовать .Select
или .Activate
, что вы должны избегать.Также добавлена ссылка на лист, так что вы всегда можете сослаться на нее в своем коде, как в примере.
Что-то важное, используйте Option Explicit
для принудительного объявления всех ваших переменных, иначе вы столкнетесь со многими ошибками:
Option Explicit
Sub Test()
Dim ws As Worksheet, k As Long, l As Long, conta As Long
'I believe the workbook with the bond forward sheet is not called report, so change the name and include it's extension
Set ws = Workbooks("Report.xlsx").Sheets("bond forward")
k = 1000
l = 2000
With ws
For conta = 16 To 500
If conta > 71 And conta < 78 Then GoTo NextRow 'this will skip the rows 72-77
If .Cells(conta, 14) = "BDCHFT_MM" Then
.Rows(conta).Copy 'you can copy in one step without selecting
.Rows(k).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False 'same for paste
k = k + 1
ElseIf .Cells(conta, 14) = "BAT_TIGO" Then 'also you don't need another loop to do this, just another variable for the paste row
.Rows(conta).Copy
.Rows(l).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
l = l + 1
End If
NextRow:
Next conta
End With
End Sub