VBA - Bereich von 300 geschlossenen Arbeitsmappen in eine konsolidierte Hauptarbeitsmappe kopieren

VBA - Bereich von 300 geschlossenen Arbeitsmappen in eine konsolidierte Hauptarbeitsmappe kopieren

Bitte helfen Sie mir beim Schreiben der Formel zum Abrufen der Daten aus 300 geschlossenen Arbeitsmappen (und ich möchte keine dieser 300 Arbeitsmappen öffnen). Projektbeschreibung: Es gibt 300 Excel-Zeitnachweise. Sie müssen den Bereich (A1:AC51) aus jedem Zeitnachweis in die Hauptberechnungsarbeitsmappe kopieren, die Lohnabrechnung berechnen und dann das Ergebnis der Lohnabrechnung in ein anderes Arbeitsblatt in derselben Hauptarbeitsmappe kopieren. Der Trick dabei ist, dies zu tun, ohne die 300 Excel-Zeitnachweise zu öffnen. Ich habe den folgenden Code geschrieben, weiß aber nicht, wie ich die Formel zum Abrufen der Daten aus einer geschlossenen Arbeitsmappe schreiben soll. Bitte helfen Sie mir. Nochmals,

  • Es gibt 300 Excel-Zeitnachweise (geschlossene Arbeitsmappen), Sheets("EmpInput")
  • Es gibt eine Hauptberechnungsarbeitsmappe (offen), Tabellen("Haupt")
  • Ziel: Aus jedem Stundenzettel exakt den gleichen Bereich kopieren, Lohn berechnen, Ergebnis in ein anderes Blatt kopieren, Sheets("Ergebnisse")

Vielen Dank im Voraus!

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

Antwort1

Das Format ist ='C:\Path\[SourceFileName.xlsx]SourceSheetName'!A1:Z9.

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

Weitere Informationen finden Sie unterRange.FormulaArray-Eigenschaft (Excel)UndErstellen eines externen Verweises (Links) auf einen Zellbereich in einer anderen Arbeitsmappe. Auch verwendenOption Explicitum Tippfehler wie zu vermeiden empoyeeTimesheet.

verwandte Informationen