VBA - 将范围从 300 个已关闭的工作簿复制到一个主合并工作簿

VBA - 将范围从 300 个已关闭的工作簿复制到一个主合并工作簿

请帮助编写公式以从 300 个已关闭的工作簿中提取数据(我不想打开这 300 个工作簿中的任何一个)。项目描述:有 300 个 excel 时间表。需要将每个时间表的范围(A1:AC51)复制到主计算工作簿上,计算工资单,然后将工资单结果复制到同一主工作簿中的另一个工作表中。这里的技巧是在不打开 300 个 excel 时间表的情况下完成此操作。我写了下面的代码,但我不知道如何编写公式来从已关闭的工作簿中提取数据,请帮忙吗?再次,

  • 有 300 个 Excel 时间表(已关闭的工作簿),Sheets("EmpInput")
  • 有一个主计算工作簿(打开),Sheets("Main")
  • 目标:从每个时间表复制完全相同的范围,计算工资单,将结果复制到另一张表,表格(“结果”)

提前谢谢您!

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)Range.FormulaArray property (Excel)创建对另一个工作簿中的单元格区域的外部引用(链接)。另外,使用选项明确以避免出现类似拼写错误empoyeeTimesheet

相关内容