Вам не нужно копировать ячейку за ячейкой. Вы можете скопировать весь диапазон одновременно, что намного быстрее.
Также убедитесь, что вы указали рабочую книгу и рабочую таблицу, в которую хотите скопировать. Никогда не используйте Range
или Cells
без указания рабочего листа (или Excel угадает, и это может быть неправильно).
Option Explicit
Public Sub ReadAndMerceData()
Dim objFs As Object
Set objFs = CreateObject("Scripting.FileSystemObject")
Dim objFolder As Object
Set objFolder = objFs.GetFolder("C:\Users\XXX\Desktop\TEST")
Dim dest As Worksheet 'define your destination sheet!
Set dest = ThisWorkbook.Worksheets("DestinationSheet")
'make them variabes if they are dynamic otherwise use constants if hardcoded.
Const TotalRows As Long = 50
Const TotalCols As Long = 17
Dim iStartRow As Long
Dim file As Object
For Each file In objFolder.Files
Dim src As Workbook
Set src = Workbooks.Open(file.Path)
'copy all cells at once
dest.Cells(iStartRow + 1, 1).Resize(TotalRows, TotalCols).Value = src.Worksheets("Tabelle1").Cells(1, 1).Resize(TotalRows, TotalCols).Value
iStartRow = iStartRow + TotalRows + 1
src.Close SaveChanges:=False
Next file
End Sub
Объяснение
Эта dest.Cells(iStartRow + 1, 1)
является первой ячейкой, которую мы Если вы хотите скопировать в него с помощью .Resize(TotalRows, TotalCols)
, мы расширяем эту ячейку в диапазон и устанавливаем ее .Value
равной диапазону исходных листов, который начинается в первой ячейке src.Worksheets("Tabelle1").Cells(1, 1)
и имеет такое же количество строк и столбцов .Resize(TotalRows, TotalCols)
.
Обратите внимание, что копирование полного диапазона всегда выполняется быстрее, чем копирование одной и той же ячейки данных за ячейкой, поскольку необходимо выполнить только одно действие копирования.