Selected Answer
In your code you refer to both SL1 and Print1 without having declared them as variables. If you add Option Explicit at the top of your code VBA will alert you to such omissions. I have commented and corrected your code below. But then I also re-wrote it in a way which appears more efficient. You will find that second version appended at the bottom.
Option Explicit
Sub CopyColumns()
' always declare all the variables you are going to use
Dim WsIn As Worksheet, WsOut As Worksheet
Dim lastRow As Long, eRow As Long
Dim i As Long
' your problem hails from the fact that your code refers to
' worksheet objects which weren't declared and therefore not available
Set WsIn = Worksheets("Sl1")
Set WsOut = Worksheets("Print1")
' simple Rows.Count counts the rows in the ActiveSheet
' that may be the same as wsin but it isn't wsin which is referred to
lastRow = WsIn.Cells(WsIn.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
' wsin.Cells(i, 14) refers to the range whose default property is Value.
' the Value property is implied but it will save you gray hair one day
' when you write it into the code so you can see what you mean.
If WsIn.Cells(i, 14).Value = "OK" Then
' wsin.Cells(i, 1) refers to a range. The next command copies the
' range, with dozens of properties, not merely its Value
WsIn.Cells(i, 1).Copy
' why so complicated, using Offset? The next row is at +1
eRow = WsOut.Cells(WsOut.Rows.Count, 1).End(xlUp).Row + 1
' Worksheets("Print1") = WsOut
' You can refer to it by either name but better use only one
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 1)
WsIn.Cells(i, 2).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 2)
WsIn.Cells(i, 3).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 3)
WsIn.Cells(i, 4).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 4)
WsIn.Cells(i, 5).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 5)
WsIn.Cells(i, 6).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 6)
WsIn.Cells(i, 7).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 7)
WsIn.Cells(i, 8).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 8)
WsIn.Cells(i, 9).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 9)
WsIn.Cells(i, 10).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 10)
WsIn.Cells(i, 11).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 11)
WsIn.Cells(i, 12).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 12)
WsIn.Cells(i, 13).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 13)
WsIn.Cells(i, 14).Copy
WsIn.Paste Destination:=Worksheets("Print1").Cells(eRow, 14)
End If
Next i
Application.CutCopyMode = False
' the next command doesn't specify a worksheet
' therefore the range will be selected on the ActiveSheet
Range("A1").Select
End Sub
Sub CopyColumns_Revised()
' 24 Aug 2018
Dim WsIn As Worksheet, WsOut As Worksheet
Dim lastRow As Long, eRow As Long
Dim R As Long
Set WsIn = Worksheets("Sl1")
Set WsOut = Worksheets("Print1")
Application.ScreenUpdating = False ' speeds up execution!
With WsIn
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For R = 2 To lastRow
If .Cells(R, 14).Value = "OK" Then
eRow = WsOut.Cells(WsOut.Rows.Count, 1).End(xlUp).Row + 1
Range(.Cells(R, 1), .Cells(R, 14)).Copy Destination:=WsOut.Cells(eRow, 1)
End If
Next R
End With
With Application
.CutCopyMode = False
.ScreenUpdating = True
End With
With WsOut
.Activate ' can only select a range on the ActiveSheet
.Cells(1, 1).Select
End With
End Sub