2 Stimmen

Importieren von Daten aus vielen Excel-Arbeitsmappen und -Blättern in eine einzige Arbeitsmappe/Tabelle

Ich habe 54 Excel-Dateien mit jeweils drei Blättern, jedes Blatt hat eine unterschiedliche Anzahl von Dateneinträgen, aber sie sind in einem identischen Format angelegt, und ich muss die Daten aus diesen Blättern in eine einzige Arbeitsmappe mit VBA importieren.

Gibt es eine Möglichkeit, wie ich es so programmieren kann, dass ich die Schleifen zum Importieren der Daten erstellen kann, ohne jedoch den Namen jeder Arbeitsmappe für jede Schleife/jedes Blatt eingeben zu müssen? Ich denke, ich kann die Aufruffunktion verwenden, aber ich weiß nicht, wie ich die Schleifencodes unabhängig vom Namen der Arbeitsmappe machen kann, für die sie gelten.

Ich danke Ihnen vielmals im Voraus,

Millie

3voto

Shaun Punkte 321

Natürlich können Sie die Arbeitsmappen in einem Ordner einfach in einer Schleife öffnen und dann eine Schleife über ihre Blätter ziehen. Je nach den geringfügigen Unterschieden im Format müssen Sie beim Importieren möglicherweise etwas mehr Arbeit leisten.

Sub ImportWorkbooks(destination as workbook, importFolderPath As String)

    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    'Get the folder object associated with the directory
    Set objFolder = objFSO.GetFolder(importFolderPath)

    'Loop through the Files collection and import each workbook
    For Each objFile In objFolder.Files
        Dim source As Workbook
        Set source = Application.Workbooks.Open(objFile.Path, ReadOnly:=True)
        ImportWorkbook source, destination
        wb.Close
        Set wb = Nothing
    Next

    Set objFolder = Nothing
    Set objFile = Nothing
    Set objFSO = Nothing

End Sub

Sub ImportWorkbook(source As Workbook, destination as Workbook)
    Dim sheet As Worksheet

    'Import each worksheet
    For Each sheet In source.Sheets
        ImportWorksheet sheet, destination
    Next sheet
End Sub

Sub ImportWorksheet(sheet As Worksheet, destination as Workbook)

    'Perform your import logic for each sheet here (i.e. Copy from sheet and paste into a 
    'sheet into the provided workbook)

End Sub

Die grundlegende Verwendung wäre etwa die folgende, um in die aktuelle Arbeitsmappe zu importieren:

ImportWorkbooks ThisWorkbook, "c:\path\to\folder\containing\workbooks\to\import"

1voto

Marc Thibault Punkte 1648

Es braucht nur zwei Dinge: Ein Array mit den Namen der Arbeitsmappendateien, z. B.

 dim books
 books = array("book1.xls","book2.xls",....)

Dann sieht Ihr Schleifencode etwa so aus

dim myBk as Workbook
dim bkFile as string
For Each bkFile in books
   myBk = Workbooks.Open(bkFile, ReadOnly)
   myBk.Activate
   'Transfer cells from myBk to target workbook
   target.cells(--).Value = myBk.Sheets("myStuff").Cells(--) 
   ...
Next

Bei den Details kann ich Ihnen nicht weiterhelfen. Sie müssen das Argument target.cells bei jedem Durchlauf durch die Schleife ändern, um das Datenziel zu verschieben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X