VBA: copie el rango de 300 libros cerrados en un libro principal consolidado

VBA: copie el rango de 300 libros cerrados en un libro principal consolidado

Ayúdeme a escribir la fórmula para extraer datos de 300 libros cerrados (y no quiero abrir ninguno de esos 300 libros). Descripción del proyecto: Hay 300 hojas de horas en Excel. Necesita copiar el rango (A1:AC51) de cada hoja de horas en el libro de cálculo principal, calcular la nómina y luego copiar el resultado de la nómina a otra hoja de trabajo en el mismo libro principal. El truco aquí es hacerlo sin abrir las 300 hojas de horas de Excel. Escribí el código a continuación, pero no sé cómo escribir la fórmula para extraer los datos de un libro cerrado, ¿ayuda? De nuevo,

  • Hay 300 hojas de horas de Excel (libros cerrados), Hojas de cálculo ("EmpInput")
  • Hay un libro de cálculo principal (abierto), Hojas de cálculo ("Principal")
  • Objetivo: copiar exactamente el mismo rango de cada hoja de horas, calcular la nómina, copiar el resultado a otra hoja, Hojas ("Resultados")

¡Muchas gracias de antemano!

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

Respuesta1

El formato es ='C:\Path\[SourceFileName.xlsx]SourceSheetName'!A1:Z9.

Intentar Range("A1:AC51").FormulaArray = "='C:\GatherTimesheets\[" & employeeTimesheet & "]EmpInput'!A1:AC51".

Para más información verPropiedad Range.FormulaArray (Excel)yCrear una referencia externa (enlace) a un rango de celdas en otro libro. Además, utiliceOpción explícitapara evitar errores tipográficos como empoyeeTimesheet.

información relacionada