У меня есть рабочая тетрадь с двумя листами:
«Обработка данных» содержит список ссылок на ячейки следующим образом:
Input Column Input Row Start Input Row End Output Column
C 88 105 A
H 198 215 B
G 253 270 C
«Результаты» содержит пустую таблицу с заголовками в строке 1.
Мне нужен макрос VBA, который открывает каждый файл .xls в текущей папке и копирует данные с первого листа каждого в лист «Результаты» в соответствии с таблицей данных.
Например, должна быть открыта первая рабочая книга, и данные, хранящиеся в C88: C105, должны быть скопированы в столбец A «Результаты», затем H198: H215 в строку B, затем G253: G270 в столбец C.
Это должно быть повторено для каждой книги в папке, данные вставляются в первую пустую строку (которая может быть взята в качестве первой пустой ячейки в столбце A) на листе «Результаты».
Вот что у меня есть:
Sub Consolidate()
Dim wkbkorigin As Workbook
Dim originsheet As Worksheet
Dim destsheet As Worksheet
Dim ResultRow As Long
Dim Fname As String
Set destsheet = Workbooks("Consolidate_data.xlsm").Worksheets("Results")
'get list of all files in folder
Fname = Dir(ThisWorkbook.Path & "/*.xls")
'loop through each file in folder (excluding this one)
Do While Fname <> "" And Fname <> ThisWorkbook.Name
Set wkbkorigin = Workbooks.Open(ThisWorkbook.Path & "/" & Fname)
Set originsheet = wkbkorigin.Worksheets("Sheet1")
'find first empty row in destination table
ResultRow = destsheet.Range("A1").End(xlDown).Offset(1, 0).Row
'start at top of list of cell references and work down until empty cell reached
Application.Goto ThisWorkbook.Worksheets("Data Processing").Range("A2")
Do While IsEmpty(ActiveCell) = False
originsheet.Range(ActiveCell.Value & ActiveCell.Offset(0, 1).Value & ":" & ActiveCell.Value & ActiveCell.Offset(0, 2).Value).Copy
destsheet.Range(ActiveCell.Offset(0, 4).Value & ResultRow & ":" & ActiveCell.Offset(0, 4).Value & (ResultRow + (ActiveCell.Offset(0, 2).Value - ActiveCell.Offset(0, 1).Value))).PasteSpecial
ActiveCell.Offset(1, 0).Select
Loop
Workbooks(Fname).Close SaveChanges:=False 'close current file
Fname = Dir 'get next file
Loop
End Sub
В настоящее время макрос останавливается на ResultRow = destsheet.Range("A1").End(xlDown).Offset(1, 0) '.End(xlDown).Offset(1, 0).Row
с «Ошибка времени выполнения 1004: ошибка приложения или ошибка, определенная объектом».
Есть идеи?