Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Alle.txt-Datei aus einem Ordner importieren

Alle.txt-Datei aus einem Ordner importieren
19.08.2015 12:35:17
Basti
Servus Herber-Gemeinde,
leider bin ich erneut an meine VBA-Grenzen gestossen und benötige Eure Unterstützung.
Das Thema ist zwar schon 1000-mal diskutiert, leider komme ich mit meinen Copy & Paste-Fähigkeiten damit nicht zurecht.
Der u.a. Code liest "eine" ausgewählte .txt aus dem gewählten Ordner und importiert den Inhalt in Spalte A der aktuell geöffneten Tabelle.
Mein Ziel ist es, dass "alle" Dateien im Zielordner, die diese Format haben, in Spalten getrennt und mit dem Dateinamen als Überschrift in die aktuelle Mappe geschrieben werden.
Danke für Eure Hilfe
Gruß
Basti
Sub Datei_importieren()
Dim Datei As String, Text As String
Dim Zeile As Long
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
On Error GoTo Fehler
'Quelldatei festlegen
Datei = Application.GetOpenFilename("Textdateien (*.txt), *.txt")
Open Datei For Input As #1         ' Quelldatei öffnen.
Zeile = 1
Do While Not EOF(1)           ' Schleife bis Dateiende
Line Input #1, Text      ' Text lesen
ActiveSheet.Cells(Zeile, 1) = Text
Zeile = Zeile + 1
Loop
Close #1   'Quelldatei schließen
Exit Sub
Fehler:
Close #1
MsgBox "FehlerNr.: " & Err.Number & vbNewLine & vbNewLine _
& "Beschreibung: " & Err.Description _
, vbCritical, "da ist leider ein Fehler aufgetreten"
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle.txt-Datei aus einem Ordner importieren
19.08.2015 13:35:52
Matthias
Hallo Basti,
Dir(Datei)
liefert dir die Datei die du mit GetOpenFile gewählt hast
Dir("*.*")
liefert dir die erste Datei in deinem mit GetOpenFile ermittelten Verzeichnis
Dir
(ohne Angabe von Elementen) wählt die nächste Datei im Verzeichnis
Wenn du weitere Hilfe benötigst, sag bescheid
lg Matthias

Anzeige
AW: Alle.txt-Datei aus einem Ordner importieren
19.08.2015 13:36:56
Matthias
Der Doppelpost tut mir leid, wiedermal zu ungeduldig.
lg Matthias

AW: Alle.txt-Datei aus einem Ordner importieren
19.08.2015 13:51:51
Matthias
Hier mal eine auf die für dich relaventen Basics gekürzte Variante eines Codes den ich mal verwendet habe:

Dim myFileAddress As Variant, myFileDirectory As String, myFile As String 'Adresse / Dateipfad / _
Dateiname
myFileAddress = Application.GetOpenFilename("CSV-Dateien *.csv,*.csv")
If myFileAddress = False Then Exit Sub
myFile = Dir("*.*") 'erste Datei im Ordner
myFileDirectory = CurDir(myFileAddress)
Do Until myFile = ""
myFileAddress = "TEXT;" & myFileDirectory & "\" & myFile
Call Open_File 'Datei importieren und im TB "Tmp" temporär ablegen
Call Copy_File  'Daten aus TB "Tmp" ausschneiden und im TB "Import-Daten" einfügen
myFile = Dir 'nächste Datei
Loop
Ich denke den Rest solltest du selber hinkriegen ;)
lg Matthias

Anzeige
AW: Alle.txt-Datei aus einem Ordner importieren
19.08.2015 15:32:18
Basti
Servus Matthias,
hast Du noch die Routine/Funktion für
Call Open_File 'Datei importieren und im TB "Tmp" temporär ablegen

&
Call Copy_File  'Daten aus TB "Tmp" ausschneiden und im TB "Import-Daten" einfügen

Ohne die funktioniert der Ablauf zumindestens nicht.
Gruß
Basti

Anzeige
AW: Alle.txt-Datei aus einem Ordner importieren
19.08.2015 16:04:55
Matthias
Sicher, ich bin nur davon ausgegangen, dass du das ganze mit deinen Aktionen ersetzt^^
Du verwendest ja auch eine Methode um die Mappe selber zu öffnen und nur bestimmte Elemente davon zu kopieren - nicht wie ich die komplette Datei zu importieren.
Statt Open_File würdest du folgende deiner Zeilen dort einfügen, wobei "Datei" mit "myFileAddress" ersetzt werden müsste:
(myFileAddress = myFileDirectory & "\" & myFile)

Open myFileAddress For Input As #1         ' Quelldatei öffnen.
Zeile = 1
Do While Not EOF(1)           ' Schleife bis Dateiende
Line Input #1, Text      ' Text lesen
ActiveSheet.Cells(Zeile, 1) = Text
Zeile = Zeile + 1
Loop
Close #1   'Quelldatei schließen

Da ich dir aber meine Subs nicht vorenthalten will, kannst du auch diese haben. Warum ich die Daten erst in die Tabelle "Tmp" importiere rührt daher, dass ich aus den einzelnen Dateien Kopf-/ und Fußzeilen abgeschnitten habe, bevor ich das ganze zu den bestehenden Daten kopiere. Zudem wird der zweite Import im Normalfall rechts an den alten rangekleckst, das wollte ich ohne viel Aufwand umgehen.
Vorsicht! Die Varibale myFileAddress muss hier als Public deklariert werden, da sie an das Unterprogramm übergeben wird.

Private Sub Open_File()
Tabelle2.Select
Range("A1").Select
'Importieren nach TB "Tmp"
With ActiveSheet.QueryTables.Add(Connection:=myFileAddress, Destination:=Range("A1"))
.Name = myFile
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 852
.TextFileStartRow = 2
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 2, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'Kopf-/Fußzeilen abschneiden
Range("A1").Select
End Sub

Die Optionen zur Connection am besten bestimmen in du über "Externe Daten abrufen" das ganze einmal manuell ausführst und durch dabei den Makrorecorder laufen lässt.
'Temporär abgelegte Daten Verschieben
Private Sub Copy_File()
'Daten markieren, ausschneiden
Selection.CurrentRegion.Select
Selection.Cut
Range("A1").Select
Tabelle3.Select
Application.DisplayAlerts = False
Range("A1").Select
If Range("A1")  "" Then
Range("A" & Cells(Rows.Count, 1).End(xlUp).Row + 1).Select
End If
ActiveSheet.Paste
End Sub

Anzeige
AW: Alle.txt-Datei aus einem Ordner importieren
19.08.2015 16:18:09
Matthias
Ach, bevor ich's vergess',
der Nachteil an meiner Variante ist, dass dabei immer eine Connection und ein Bereich entstehen. Das sammelt sich mit der Zeit, wenn dieses Dokument nicht als Vorlage gespeichert wird ganz schön an. Weiss nicht wie es bei dir aussieht, aber mich stört sowas.
Damit kannst du alle entfernen:
'Verbindungen entfernen und Bereiche leeren
Dim objConnection, objName
Application.DisplayAlerts = False
For Each objConnection In ActiveWorkbook.Connections
objConnection.Delete
Next objConnection
For Each objName In ActiveWorkbook.Names
objName.Delete
Next objName
Application.DisplayAlerts = True
Hast du wichtige Connections die du behalten willst/musst, kann ich dir dazu auch noch was geben.
lg Matthias

Anzeige
AW: Alle.txt-Datei aus einem Ordner importieren
20.08.2015 08:47:52
Basti
Guten Morgen Matthias,
vielen Dank für deine Erklärungen und Unterstützung.
Leider reichen meine Copy&Paste-Fähigkeiten nicht aus um deinen Code zum laufen zu bringen.
Ich renne von einer Fehlermeldung zur anderen.
Vieleicht kommt noch jemand mit einer anderen Lösung um die Ecke, die ich kopieren darf ;)
Gruß
Basti

Anzeige
AW: Alle.txt-Datei aus einem Ordner importieren
20.08.2015 09:08:03
Matthias
Guten Morgen Basti,
https://www.herber.de/bbs/user/99694.xlsm
hier hab ich nochmal eine kleine Mitschrift zum Thema Import. Dort ist auch nochmal das vollständige Beispiel drinn. Vielleicht hilft es dir.
lg Matthias

Anzeige
AW: Alle.txt-Datei aus einem Ordner importieren
19.08.2015 13:36:02
Matthias
Hallo Basti,
Dir(Datei)
liefert dir die Datei die du mit GetOpenFile gewählt hast
Dir("*.*")
liefert dir die erste Datei in deinem mit GetOpenFile ermittelten Verzeichnis
Dir
(ohne Angabe von Elementen) wählt die nächste Datei im Verzeichnis
Wenn du weitere Hilfe benötigst, sag bescheid
lg Matthias
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Alle .txt-Dateien aus einem Ordner importieren


Schritt-für-Schritt-Anleitung

Um alle .txt-Dateien aus einem Ordner in Excel zu importieren, kannst du ein VBA-Makro verwenden. Hier findest du eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Rechtsklick auf VBAProject (dein Arbeitsblattname) > Einfügen > Modul.
  3. Kopiere und füge den folgenden Code ein:

    Sub Alle_txt_Dateien_importieren()
       Dim myFile As String, myFileDirectory As String
       Dim Zeile As Long
       Dim Text As String
    
       myFileDirectory = Application.GetOpenFilename("Textdateien (*.txt), *.txt", , "Wähle eine .txt-Datei", , False)
       If myFileDirectory = "False" Then Exit Sub
    
       myFile = Dir(myFileDirectory)
       Zeile = 1
    
       Do While myFile <> ""
           Open myFileDirectory & "\" & myFile For Input As #1
           Do While Not EOF(1)
               Line Input #1, Text
               ActiveSheet.Cells(Zeile, 1) = Text
               Zeile = Zeile + 1
           Loop
           Close #1
           myFile = Dir
       Loop
    End Sub
  4. Führe das Makro aus:

    • Klicke auf Run oder drücke F5, um das Makro zu starten.
  5. Wähle den Ordner aus, der die .txt-Dateien enthält.

Dieses Makro importiert den Inhalt aller .txt-Dateien in die aktuell geöffnete Excel-Tabelle.


Häufige Fehler und Lösungen

  • Fehler: "Datei nicht gefunden"

    • Stelle sicher, dass der Pfad zu den .txt-Dateien korrekt ist und dass die Dateien vorhanden sind.
  • Fehler: "Typenübereinstimmung"

    • Überprüfe, ob die Variablen richtig deklariert sind. Insbesondere sollte myFileDirectory korrekt zugewiesen werden.
  • Die importierten Daten erscheinen nicht in Spalte A

    • Vergewissere dich, dass ActiveSheet auf das richtige Arbeitsblatt verweist.

Alternative Methoden

Wenn du keine VBA-Programmierung verwenden möchtest, kannst du auch den Daten importieren-Assistenten in Excel nutzen:

  1. Gehe zu Daten > Daten abrufen > Aus Datei > Aus Text/CSV.
  2. Wähle die .txt-Datei aus und folge den Anweisungen des Assistenten.

Diese Methode ist einfach und benötigt keine Programmierkenntnisse, hat jedoch Einschränkungen bei der Verarbeitung mehrerer Dateien.


Praktische Beispiele

Beispiel 1: Import einer spezifischen .txt-Datei

  • Verwende den oben angegebenen Code und passe den Dateipfad an, um eine bestimmte Datei zu importieren.

Beispiel 2: Importieren und Filtern der Daten

  • Du kannst zusätzliche Logik integrieren, um nur bestimmte Zeilen oder Spalten zu importieren, z.B. nur Zeilen, die mit einem bestimmten Wort beginnen.

Tipps für Profis

  • Verwende Application.DisplayAlerts = False in deinem VBA-Code, um Pop-ups zu vermeiden, wenn du mit mehreren Dateien arbeitest.
  • Optimiere den Importprozess durch Nutzung von Arrays, um Daten zwischenzuspeichern, bevor sie in die Excel-Tabelle geschrieben werden.
  • Teste den Code schrittweise und verwende MsgBox-Ausgaben, um den Fortschritt und mögliche Fehler zu verfolgen.

FAQ: Häufige Fragen

1. Wie kann ich .txt-Dateien öffnen, die nicht im UTF-8-Format sind? Um .txt-Dateien, die in einem anderen Format gespeichert sind, zu importieren, musst du die TextFormat-Eigenschaften im Code anpassen.

2. Kann ich das Makro so anpassen, dass die Daten in mehreren Spalten importiert werden? Ja, du kannst die Line Input #1-Zeile durch Input #1 ersetzen und die Daten in ein Array laden, um sie in mehreren Spalten anzuzeigen.

Mit diesen Anweisungen und Tipps solltest du in der Lage sein, alle .txt-Dateien aus einem Ordner erfolgreich in Excel zu importieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige