Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
364to368
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
364to368
364to368
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Automatisches Einlesen mehrerer Textdateien

Automatisches Einlesen mehrerer Textdateien
19.01.2004 20:38:16
Thorsten
Hallo.
Ich habe es geschafft über VBA eine Textdatei in Excel importieren zu lassen. *freu* Nun ist es mein Ziel mehrere Dateien aus einem Ordner dies machen zu lassen. Ist das realisierbar? Vielleicht in einer Schleife? Die Texte, die in die Spalten geschrieben werden, sollen untereinander geschrieben werden...
Hat jemand da Erfahrung mit?
Das ware klasse
Gruß Thorsten

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatisches Einlesen mehrerer Textdateien
19.01.2004 22:33:30
Matthias G
Hallo Thorsten,
Folgende Schleife findet alle *.txt-Dateien in C:\test mittels einer Schleife.
Da kannst du deinen Code sicher reinbauen.

Sub ZeigeDateien()
Dim datei As String
datei = Dir("C:\test\*.txt")
Do While datei <> ""
Debug.Print datei
'Hier kann dein Code stehen
datei = Dir
Loop
End Sub

Gruß,
Matthias
Vielleicht etwas überdimensioniert...
19.01.2004 22:54:15
Ramses
Hallo
aber das hatte ich in einer ähnlichen Form schon.


Sub Import_txt_Files()
'(C) Ramses
'liest all Daten von txt Files in beliebig vielen Subfolders ein
'und schreibt alle Daten eines Subfolders in ein EXCEL-Sheet
'Für jeden Subfolder wird ein neues Sheet erstellt
'-------------
Dim As Long, n As Integer, m As Integer, intTotFiles As Long, fSlash As Integer
Dim txtlines As Long, totFiles As Long, textArr() As Variant
Dim geffile As String, dname As String
Dim Suchpfad As String, Suchbegriff As String, Dateiform As String
Dim tmpFoName As String, tmpFoNameFirst As String, Text1 As String
Dim si As Integer, myDiv As Boolean
Dim oldStatus As Variant
Suchpfad = InputBox("Geben Sie den Ordner an, der durchsucht werden soll.", "Pfad definieren", "C:\")
If Suchpfad = "" Then Exit Sub
Dateiform = InputBox("Geben Sie den Dateityp an der gesucht werden soll", "Dateierweiterung", "*.txt")
If Dateiform = "" Then Exit Sub
Application.ScreenUpdating = True
oldStatus = Application.StatusBar
myDiv = False
'Alle Tabellen löschen bis auf eine
Application.DisplayAlerts = False
For i = Worksheets.Count To Step -1
    Worksheets(i).Delete
Next
Application.DisplayAlerts = True
Close #1
With Application.FileSearch
    .LookIn = Suchpfad
    'Unterordner durchsuchen = ".SearchSubFolders = True" !!!
    .SearchSubFolders = False
    .filename = Dateiform
    If .Execute() > 0 Then
        totFiles = .FoundFiles.Count
        Application.StatusBar = "Total " & totFiles & " gefunden"
        For i = 1 To .FoundFiles.Count
            geffile = .FoundFiles(i)
                If i = 1 Then
                    'FolderName aufnehmen
                    tmpFoName = geffile
                    For n = 1 To Len(tmpFoName) - 5
                        If Mid(tmpFoName, n, 1) = "\" Then
                            fSlash = n
                        End If
                    Next n
                    tmpFoNameFirst = Left(tmpFoName, fSlash)
                    ActiveSheet.Name = "Test0" & i
                Else
                    tmpFoName = geffile
                    For n = 1 To Len(tmpFoName) - 5
                        If Mid(tmpFoName, n, 1) = "\" Then
                            fSlash = n
                        End If
                    Next n
                    tmpFoName = Left(tmpFoName, fSlash)
                End If
                If i = 1 Then
                    Debug.Print "Start 1. Sequenz"
                    Debug.Print geffile
                    Open geffile For Input As #1
                    'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
                    'Zähler auf 0 setzen
                    txtlines = 0
                    Do While Not EOF(1)    ' Schleife bis Dateiende.
                        Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
                        'Zähler hochzählen
                        txtlines = txtlines + 1
                    Loop
                    'Schliessen der Datei weil Dateiende erreicht wurde
                    Close #1
                    'Erneutes Öffnen um zum Dateianfang zu kommen
                    Open geffile For Input As #1    ' Datei zum Einlesen öffnen.
                    'Array neu auf die Anzahl der Linien initialisieren
                    ReDim textArr(txtlines)
                    'Einlesen der Dateien in das Array
                    For n = 1 To txtlines
                        Line Input #1, textArr(n)
                    Next n
                    'Schreiben in Tabelle
                    For m = 1 To UBound(textArr())
                        Debug.Print ActiveSheet.Cells(65536, 1).End(xlUp).Row
                        ActiveSheet.Cells(ActiveSheet.Cells(65536, 1).End(xlUp).Row + 1, 1) = textArr(m)
                    Next m
                    ReDim textArr(0)
                    Debug.Print "1 Ende"
                Else
                    If tmpFoName = tmpFoNameFirst Then
                        Debug.Print "Start nächste Datei Sequenz"
                        Debug.Print geffile
                        Close #1
                        '-------------------
                        'Datei öffnen zum einlesen in ein Array
                        Open geffile For Input As #1
                        'Die anzahl ist nötig um die nächste Grösse des Arrays zu deklarieren
                        'Zähler auf 0 setzen
                        txtlines = 0
                        Do While Not EOF(1)    ' Schleife bis Dateiende.
                            Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
                            'Zähler hochzählen
                            txtlines = txtlines + 1
                        Loop
                        'Schliessen der Datei weil Dateiende erreicht wurde
                        Close #1
                        'Erneutes Öffnen um zum Dateianfang zu kommen
                        Open geffile For Input As #1    ' Datei zum Einlesen öffnen.
                        'Array Anzahl definieren
                        'Array neu auf die Anzahl der Linien initialisieren
                        ReDim textArr(txtlines)
                        'Einlesen der Dateien in das Array
                        For n = 1 To txtlines
                            Line Input #1, textArr(n)
                        Next n
                        Close #1
                        'Schreiben in Tabelle
                        For m = 1 To UBound(textArr())
                            ActiveSheet.Cells(ActiveSheet.Cells(65536, 1).End(xlUp).Row + 1, 1) = textArr(m)
                        Next m
                        ReDim textArr(0)
                    Else
                        Debug.Print "Start Sequenz Neuer Ordner"
                        Debug.Print geffile
                        '-------------------
                        'Es wurde ein File aus einem anderen Ordner geöffnet
                        'Neue Tabelle anlegen und Folder neu bestimmen
                        tmpFoNameFirst = tmpFoName
                        'Trennt die bisherigen Daten in Spalten auf
                        Columns("A:A").Select
                        Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
                        Worksheets.Add
                        If i < 10 Then
                            ActiveSheet.Name = "Test0" & i
                        Else
                            ActiveSheet.Name = "Test" & i
                        End If
                    End If
                End If
        Next i
    End If
End With
ReDim textArr(0)
'für den letzten Ordner
'Trennt die Daten in Spalten auf
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Application.StatusBar = oldStatus
Application.ScreenUpdating = True
End Sub

     Code eingefügt mit Syntaxhighlighter 2.5

Gruss Rainer
Anzeige
AW: Automatisches Einlesen mehrerer Textdateien
20.01.2004 08:58:52
Thorsten
Danke an Euch beide. Ich werde es versuchen.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige