abuelito
Goto Top

VBA Excel Mehrere Dateien auslesen

Hallo an Alle,

ich habe folgendes Problem:

Ich habe einen Ordner, in diesem befinden sich mehrere xls-Dateien (ca. 2.000) ... alle haben den gleichen Aufbau, nur der Tabellenname ist in jeder Datei anders .. es gibt in jeder Datei aber immer nur eine Tabelle.

- In der 1. Zeile der Tabelle befinden sich die Spaltenüberschriften
- ab der 2. Zeile soll jede Zeile durchlaufen und nach einem bestimmten Wert in Spalte "G" gesucht werden
- Gibt es in der Spalte "G" diesen bestimmten Wert, dann soll die gesamte Zeile kopiert werden und in eine neue Datei eingefügt werden
- diese neu erstellte Datei soll aber nicht geschlossen werden, das heisst, alle gefunden Zeilen, aus allen xls-Dateien, sollen in diese neue Datei hineingepackt bzw. hineinkopiert werden ... nacheinander ..

Ich hoffe, mir kann einer dabei helfen.

Vielen Dank

Grüße

Content-Key: 273197

Url: https://administrator.de/contentid/273197

Printed on: April 19, 2024 at 22:04 o'clock

Member: colinardo
colinardo May 29, 2015 updated at 13:04:55 (UTC)
Goto Top
Moin abuelito ...
bald haben wir hier aber mal einen gut face-wink bei dir.
(Zur Info, das Script ist momentan so eingestellt nur ein Teil der Strings übereinstimmen muss, das lässt sich aber durch Ändern des Parameters Lookat in Zeile 19 anpassen indem man ihn auf xlWhole stellt. dann muss der gesamte String übereinstimmen)
Sub ImportFoundRows()
    'Pfad zu den Dateien  
    Const PATH = "C:\Ordner"  
    'Variablen  
    Dim wb As Workbook, strSearchTerm As String, c As Range, firstAddress As String, file As String
    'Suchwort  
    strSearchTerm = "SUCHWORT"  
    'Displayaktualisierung deaktivieren  
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    'Dateien suchen  
    file = Dir(PATH & "\*.xls")  
    While file <> ""  
        'Datei öffnen  
        Set wb = Workbooks.Open(PATH & "\" & file, ReadOnly:=True)  
        With wb.Sheets(1)
            'In der Spalte G nach dem Suchwort suchen  
            With .Range("G2:G" & .Cells(Rows.Count, "G").End(xlUp).Row)  
                Set c = .Find(strSearchTerm, LookIn:=xlValues, Lookat:=xlPart)
                If Not c Is Nothing Then
                    firstAddress = c.Address
                    Do
                        'Ganze gefundene Zeile in das aktuelle Sheet kopieren  
                        c.EntireRow.Copy ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)  
                        Set c = .FindNext(c)
                    Loop While Not c Is Nothing And c.Address <> firstAddress
                End If
            End With
        End With
        'Datei schließen  
        wb.Close False
        'Nächste Datei suchen  
        file = Dir
    Wend
    'Displayaktualisierung wieder aktivieren  
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
Grüße Uwe
Member: abuelito
abuelito Jun 01, 2015 at 09:59:07 (UTC)
Goto Top
Hallo Uwe,

das Script öffnet zwar alle Dateien nach und nach, aber es werden keine Daten in die neue Datei kopiert. Muss ich eine neue Datei öffnen und dann das Makro starten? Das habe ich gemacht.

Viele Grüße
Member: colinardo
colinardo Jun 01, 2015 updated at 10:04:45 (UTC)
Goto Top
Zitat von @abuelito:
das Script öffnet zwar alle Dateien nach und nach, aber es werden keine Daten in die neue Datei kopiert.
Die Daten werden in die aktuelle Arbeitsmappe (aktives Sheet) importiert in dem das Makro läuft!
Member: abuelito
abuelito Jun 01, 2015 at 10:21:44 (UTC)
Goto Top
Der importiert die Zeilen aber nicht .. liegt es evtl. am Suchwort? .. Dieses lautet A124B2

Viele Grüße
Member: colinardo
colinardo Jun 01, 2015 updated at 10:26:32 (UTC)
Goto Top
Zitat von @abuelito:
Der importiert die Zeilen aber nicht .. liegt es evtl. am Suchwort? .. Dieses lautet A124B2
Dann muss es daran liegen, geht hier nämlich einwandfrei ...
Denke daran Spalte G ... Ansonsten File irgendwo hochladen, dann ist das schnell erledigt !
Member: abuelito
abuelito Jun 01, 2015 updated at 13:21:46 (UTC)
Goto Top
So habe ich Dein Script angepasst:
Sub ImportFoundRows()

    'Pfad zu den Dateien  
    Const PATH = "F:\Daten\Daten\Test"  

    'Variablen  
    Dim wb As Workbook, strSearchTerm As String, c As Range, firstAddress As String, file As String

    'Suchwort  
    strSearchTerm = "Toll"  

    'Displayaktualisierung deaktivieren  
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    'Dateien suchen  
    file = Dir(PATH & "\*.xls")  

    While file <> ""  

        'Datei öffnen  
        Set wb = Workbooks.Open(PATH & "\" & file, ReadOnly:=True)  

        With wb.Sheets(1)

            'In der Spalte G nach dem Suchwort suchen  
            With .Range("G2:G" & .Cells(Rows.Count, "G").End(xlUp).Row)  

                Set c = .Find(strSearchTerm, LookIn:=xlValues, Lookat:=xlPart)

                If Not c Is Nothing Then

                    firstAddress = c.Address

                    Do

                        'Ganze gefundene Zeile in das aktuelle Sheet kopieren  
                        c.EntireRow.Copy ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)  

                        Set c = .FindNext(c)

                    Loop While Not c Is Nothing And c.Address <> firstAddress

                End If

            End With

        End With

        'Datei schließen  

        wb.Close False

        'Nächste Datei suchen  

        file = Dir

    Wend

    'Displayaktualisierung wieder aktivieren  
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

End Sub

[Edit Biber] Wollte es zuerst in die Tonne kloppen, habe dann aber doch nur Codeformatierung ergänzt. [/Edit]
Member: colinardo
colinardo Jun 01, 2015 updated at 10:49:00 (UTC)
Goto Top
Liegen die Daten in den Arbeitsmappen wirklich jeweils im ersten Sheet wie du gesagt hast ?
Ohne ein Beispielsheet von deiner Seite ist das hier Raten nach Zahlen denn es geht ja wie gesagt. Tu mir doch bitte einen Gefallen und poste ein Beispielsheet, um das ganze hier abzukürzen ... dann findet sich der Fehler bei dir sofort. Danke !