Пожалуйста, попробуйте этот код после прочтения комментариев и, возможно, внесения некоторых изменений в то, что скопировано. Код будет определять ширину каждого листа исходных данных шириной строки 1 (предполагая, что она содержит заголовки для всех столбцов). Он определит длину всех столбцов по длине столбца A (предполагая, что это самый длинный). Наконец, предполагается, что вы не хотите, чтобы заголовки повторялись повсюду, и поэтому берет данные только из строки 2 на каждом исходном листе. Все эти параметры вы можете установить в соответствии с вашими потребностями.
Sub GetSheets () '021
' Const Path As String = "C: \ Users \ DDC \ Desktop \ data \ «Dim FileName As String Dim WsS As Worksheet» Источник данных Dim WsT As Worksheet »Назначение данных Dim Rng As Range Dim Cl As Long» последний столбец в последней строке WsS Dim Rl As Long (чередование WsS и WsT)
' it's faster this way but you won't see what's happening
Application.ScreenUpdating = False
Set WsT = ThisWorkbook.Worksheets("Sheet1")
FileName = Dir(Path & "*.xls*")
Do While FileName <> ""
Workbooks.Open FileName:=Path & FileName, ReadOnly:=True
For Each WsS In ActiveWorkbook.Worksheets
With WsS
' this finds the last used column in row #1
' columns to the right of this will not be copied
' adjust row number to suit
Cl = .Cells(1, .Columns.Count).End(xlToLeft).Column
' this finds the last used row in column A
' rows below this (in other columns) will not be copied
' adjust the column name to suit
Rl = .Cells(.Rows.Count, "A").End(xlUp).Row
' the range to be copied will start at row #2, cluding row #1
' which is presumed to contain captions
' adjust row number to suit
Set Rng = .Range(.Cells(2, 1), .Cells(Rl, Cl))
Rl = WsT.Cells(WsT.Rows.Count, "A").End(xlUp).Row + 1
Rng.Copy Destination:=WsT.Cells(Rl, 1)
End With
Next WsS
Workbooks(FileName).Close saveChanges:=False
FileName = Dir()
Loop
Application.ScreenUpdating = True
End Sub
В вашем запросе не указано, сколько листов содержится в каждой исходной книге, но вы кодируете их все, и, следовательно, мой тоже. На самом деле существует вероятность, что в каждой книге будет только один рабочий лист. В этом случае «Все» означает 1. Но если есть также пустые рабочие листы, «все» может означать, что будут скопированы пустые строки с пустых листов. Я не предусмотрел этого.