1

I am trying to copy ranges of data from various worksheets into one worksheet. I have written this code:

Sub sub1()
For i = 1 To 3
Sheets(i).Select
Range(Cells(1, 1), Cells(1, 1).End(xlDown)).Select 'line4
Selection.Copy
Sheets(6).Select
Cells(1, i).Select
Selection.PasteSpecial xlPasteValues
Next i
End sub

I get a Run-time error '1004' Select method of Range class failed on the line 4. How can it be fixed?

1

1 Answer 1

10

You don't Select a sheet you Activate it. But actually you shouldn't do either in most cases.

You can shorten your code to:

Sub sub1()
Dim i As Long

For i = 1 To 3
    With Sheets(i)
       .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown)).Copy
    End With
    Sheets(6).Cells(1, i).PasteSpecial xlPasteValues
Next i
End Sub

Note that I also declared i. I recommend declaring all variables, and using Option Explicit to make sure you're using the variable you think you are in all cases.

EDIT: Simoco's edit is good: Here's what I came up with:

Sub sub1()
Dim i As Long
Dim wb As Excel.Workbook

Set wb = ActiveWorkbook
For i = 1 To 3
    With wb.Sheets(i)
        .Range("A1:A" & .Range("A1").End(xlDown).Row).Copy
        wb.Sheets(6).Cells(1, i).PasteSpecial xlPasteValues
    End With
Next i
End Sub

Note that I declared a Workbook variable and qualified to it. One more good practice for you!

Sign up to request clarification or add additional context in comments.

3 Comments

Thanks @ simoco, I was too focused on best practices.
Now it works! Seems like the declaration of i was crucial. Thank you, gentlemen.
Actually, it wasn't declaring i. That's just a good idea. It was trying to Select a Sheet. Happy coding!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.