If there's no logic in the naming pattern ("Data1", "Data2" etc), which would allow to be used in a looping function, you could declare an array with the worksheet names and then go just through each of those.

Dim vNames As Variant

vNames = Array("Sheet1", "Sheet2", "Sheet3")

For i = 0 To UBound(vNames)
    Sheets(vNames(i)).Activate
Next i
In your case that would be:

Dim J As Integer
Dim vNames as Variant

vNames = Array("Sheet1", "Sheet2", "Sheet3")
 On Error Resume Next
 Sheets(1).Select
 Worksheets.Add
 Sheets(1).Name = "Combined"
 Sheets(2).Activate
 Range("A1").EntireRow.Select
 Selection.Copy Destination:=Sheets(1).Range("A1")
 For J = 0 To uBound(vNames)
 Sheets(vNames(J)).Activate
 Range("A1").Select
 Selection.CurrentRegion.Select
 Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select
 Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2)
 Next J
 End Sub