I know paulked set you up so you don't really need another one to overload your mind but hey, you might want to run one and later the other one!
It does need the workbook with the code ("Final.xlsm") and the three other workbooks to be in the same folder.
It also assumes that you have headers in all sheets.
Extend the array to however many books/sheets you want. I am sure you see the relation.
Change wb names etc if and where required.
Sub Oran()
Dim wbshArr, wb As Workbook, i As Long, lc As Long, lr As Long
Application.ScreenUpdating = False
wbshArr = Array("Oran_Workbook_1", "Alice", "Oran_Workbook_2", "Mop", "Oran_Workbook_3", "Khan")
For i = LBound(wbshArr) To UBound(wbshArr) - 1 Step 2
Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & wbshArr(0) & ".xlsm")
With wb.Sheets(wbshArr(i + 1))
lc = .UsedRange.Columns.Count
lr = .UsedRange.Rows.Count
.Range(.Cells(2, 1), .Cells(lr, lc)).Copy ThisWorkbook.Sheets("Data").Cells(Rows.Count, 1).End(xlUp).Offset(1)
End With
wb.Close False
Sheets("Data").Cells(Rows.Count, 6).End(xlUp).Offset(1).Resize(lr - 1).Value = wbshArr(i + 1)
Next i
Application.ScreenUpdating = True
End Sub
BTW, for the clearing of data on the "Data" sheet, insert this line after the "ScreenUpdating = False" line.
Sheets("Data").UsedRange.Offset(1).ClearContents