VBA — Копирование диапазона из 300 закрытых рабочих книг в одну основную консолидированную рабочую книгу

VBA — Копирование диапазона из 300 закрытых рабочих книг в одну основную консолидированную рабочую книгу

Пожалуйста, помогите написать формулу для извлечения данных из 300 закрытых рабочих книг (и я не хочу открывать ни одну из этих 300 рабочих книг). Описание проекта: Есть 300 табелей учета рабочего времени Excel. Нужно скопировать диапазон (A1:AC51) из каждого табеля в основную расчетную книгу, рассчитать заработную плату, а затем скопировать результат расчета заработной платы на другой лист в той же основной рабочей книге. Хитрость здесь в том, чтобы сделать это, не открывая 300 табелей учета рабочего времени Excel. Я написал код ниже, но я застрял на том, как написать формулу для извлечения данных из закрытой рабочей книги, пожалуйста, помогите? Еще раз,

  • Имеется 300 табелей учета рабочего времени Excel (закрытые рабочие книги), Sheets("EmpInput")
  • Имеется одна основная расчетная книга (открытая), Sheets("Main")
  • Цель: Скопировать один и тот же диапазон из каждого табеля учета рабочего времени, рассчитать заработную плату, скопировать результат на другой лист, Sheets("Results")

Огромное спасибо заранее!

Public Sub GetTimesheetData()

     Dim fsoFileObject As New Scripting.FileSystemObject
     Dim employeeTimesheet As File
     Dim folderPath As String
     Dim nextEmpty As Long

     folderPath = "C:\GatherTimesheets\"    '<<<<< There are 300 excel timesheets in this folder.

     For Each employeeTimesheet In fso.folderPath.Files  '<<<< Is this correct?

        If empoyeeTimesheet.Name Like "*.xls" Then
               Sheets("Main").Select
               With Range("A1:AC51")
                  .Formula = "='C:\GatherTimesheets\" & employeeTimesheet   '<<<< How to write this formula??
                  .Value = .Value
               End With

               nextEmpty = Sheets("Results").Range("D65444").End(xlUp).Row + 1

               Sheets("Main").Range("CS1:DF1").Copy
               With Sheets("StagingRaw").Range("D" & nextEmpty)
                  .PasteSpecial xlValues
                  Application.CutCopyMode = False
               End With
         End If

     Next employeeTimesheet

End Sub

решение1

Формат — ='C:\Path\[SourceFileName.xlsx]SourceSheetName'!A1:Z9.

Пытаться Range("A1:AC51").FormulaArray = "='C:\GatherTimesheets\[" & employeeTimesheet & "]EmpInput'!A1:AC51".

Для получения дополнительной информации см.Свойство Range.FormulaArray (Excel)иСоздать внешнюю ссылку на диапазон ячеек в другой книге. Также используйтеВариант Явныйчтобы избежать опечаток, таких как empoyeeTimesheet.

Связанный контент