Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Text-Dateien automatisch einlesen

Text-Dateien automatisch einlesen
03.03.2014 07:59:02
TommiH
Moin,
ich habe ein kleines Problem.
Ich möchte 4 Text-Dateien (E1, E2, E3, E4), die als Delimiter # zwischen den Spalten haben einlesen und in 4 Arbeitsblätter (E1, E2, E3, E4) einer Excel-Datei abspeichern.
(Beim manuellen einlesen also Format: getrennt - ms-dos(PC8) - # - Standard)
Wenn ich das mit dem Makro-Aufzeichner mache, dann bekomme ich nur eine Fehlermeldung 'Zuviele Zeilenenden' oder so in der Art - gibt es da einen einfachen Weg?
LG und 'helau' ;) ,
Tommi

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Text-Dateien automatisch einlesen
03.03.2014 12:25:14
Tino
Hallo,
kenne zwar deine Datei nicht, kannst aber mal sowas versuchen.
Sub LeseTextFile()
Dim vFileName, ArData
'Wechselt das aktuelle Laufwerk
ChDrive ThisWorkbook.Path
'Wechselt das aktuelle Verzeichnis
ChDir ThisWorkbook.Path
'Standarddialogfeld Dateinamen
vFileName = Application.GetOpenFilename("Text Datei (.txt),*.txt")
'Abbruch?
If CStr(vFileName) = CStr(False) Then Exit Sub
ArData = Read_File(vFileName, "#")
If IsArray(ArData) Then 'Daten in Datei?
With Tabelle1 'Tabelle wo Daten hin sollen
.UsedRange.Clear 'vorhandene Daten löschen
.Cells(1, 1).Resize(UBound(ArData), UBound(ArData, 2)) = ArData 'Daten einfügen
End With
End If
End Sub
Function Read_File(ByVal sFileName$, sDelimiter$)
Dim sInhalt$, F%
Dim varInhalt, ArData(), tmpAr
Dim n&, nn&
If Dir$(sFileName, vbNormal)  "" Then
F = FreeFile
Open sFileName For Binary As #F
sInhalt = Space$(LOF(F))
Get #F, , sInhalt
Close
If sInhalt  "" Then
varInhalt = Split(sInhalt, vbNewLine)
ReDim Preserve ArData(1 To UBound(varInhalt) + 1, 1 To 1)
For n = LBound(varInhalt) To UBound(varInhalt)
tmpAr = Split(varInhalt(n), sDelimiter)
For nn = LBound(tmpAr) To UBound(tmpAr)
If UBound(ArData, 2) 
Gruß Tino

Anzeige
AW: Text-Dateien automatisch einlesen
03.03.2014 12:37:36
fcs
Hallo Tommi,
wahrscheinlich hat deine Textdatei zu viele Spalten (Trennzeichen) und der Recorder kann die FieldInfo(Information zum Format der Spalten) nicht in einer Code-Zeile unterbringen.
Wenn du alle Spalten als Standard einlesen willst, dann ist diese Info sowieso nicht erforderlich.
Ich würde das ganze wie folgt für die 4 Dateie über die Daten-Importfunktion lösen.
Gruß
Franz
Sub Importieren_E1_bisE4()
' Importieren_E1_bisE4 Makro
' Import von Textdateien mit # als Trenzeichen und ms-dos(PC8) als Zeichensatz
Dim strFolder As String
Dim arrFiles As Variant
Dim arrSheets As Variant, intI
Dim wks As Worksheet
strFolder = "D:\Test\"  'Verzeichnis mit den Textdateien -anpassen !!!
arrFiles = Array("E1.txt", "E2.txt", "E3.txt", "E4.txt") 'Namen Textdateien
arrSheets = Array("E1", "E2", "E3", "E4") 'Zieltabellen
For intI = LBound(arrSheets) To UBound(arrSheets)
Set wks = ActiveWorkbook.Worksheets(arrSheets(intI))
With wks
.Activate
.UsedRange.ClearContents 'Altdaten löschen
Range("A1").Select
With .QueryTables.Add(Connection:="TEXT;" & strFolder & arrFiles(intI), _
Destination:=wks.Range("$A$1"))
.Name = arrSheets(intI)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = False
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "#"
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End With
Next intI
End Sub

Anzeige
AW: Text-Dateien automatisch einlesen
04.03.2014 17:34:26
Thomas
Hallo Franz,
grade ausprobiert und - nachdem ich erst über einen kleinen Fehler (meinerseits) gestolpert bin ;) - läuft es perfekt.
Ich war davon ausgegangen, das die 4 Sheets auch selber angelegt werden. Okay, nachdem ich sie manuell angelegt habe läuft es sehr gut.
Die Parameter hinter dem With (.RowNumbers = False usw.) kann ich noch 'ausdünnen' oder? Ich weiss eh nicht bei allen, wozu sie da sind, muss ich doch mal schauen.
Wie bezeichnet man die Einträge/Parameter eigentlich?
Das Einlesen funktioniert auf alle Fälle supergut - was ich grade noch suche, kann man irgendwie einstellen, welches Format die Zellen haben (Standard oder TEXT oder ...)?
Oder setze ich das danach um?
Danke auf alle Fälle für den Code!
LG,
Tommi

Anzeige
AW: Text-Dateien automatisch einlesen
05.03.2014 01:26:08
fcs
Hallo Tommi,
Die Parameter hinter dem With (.RowNumbers = False usw.) kann ich noch 'ausdünnen' oder? Ich weiss eh nicht bei allen, wozu sie da sind, muss ich doch mal schauen.
Wie bezeichnet man die Einträge/Parameter eigentlich?

Vorsicht beim "Ausdünnen" der Parameter. Einige sind für den Textimport zwingend erforderlich, einige haben dann Vorgabewerte, wenn man sie wegläßt.
Wenn du dort andere Einstellungen möchtest, dann zeichne den Import via Menü "Daten--Externedaten abrufen" mit dem Makrorekorder auf un d passe die Einstellungen in meinem Makro an. Ich hab mal die grobe Bedeutung der meisten Parameter hinzugeschrieben. Wenn du den Import manuell machst, dann findest du in den Dialogfenstern des Importassistenten die entsprechenden Bezeichnungen.
Das Einlesen funktioniert auf alle Fälle supergut - was ich grade noch suche, kann man irgendwie einstellen, welches Format die Zellen haben (Standard oder TEXT oder ...)?
Oder setze ich das danach um?

Spalten, die unbedingt als Text oder ggf. als Datum oder auch nicht eingelesen werde sollen, muss du bereits beim Import festlegen.
Geschieht in folgender Zeile:
            .TextFileColumnDataTypes = Array(1)
Beispiel:
'Formate für die Spalten beim Import
'xlDMYFormat      4 TMJ-Datumsformat
'xlDYMFormat      7 TJM-Datumsformat
'xlEMDFormat     10 ZMT-Datumsformat
'xlGeneralFormat  1 Allgemein
'xlMDYFormat      3 MTJ-Datumsformat
'xlMYDFormat      6 MJT-Datumsformat
'xlSkipColumn     9 Spalte wird nicht analysiert
'xlTextFormat     2 Text
'xlYDMFormat      8 JTM-Datumsformat
'xlYMDFormat      5 JMT-Datumsformat
'Beispiel für Spalten-Typen beim Import
.TextFileColumnDataTypes = Array(1, 2, 4, 2, 1) 'Standard|Text|DatumTMJ|Text| _
Standard|, _
alle weiteren Spalten ebenfalls  _
Standard

Zahlen oder Datumsformate kannst du in den Tabelle vorgeben. Der Parameter für die Erhaltung der Formate muss dann entsprechend eingestellt werden.
            .PreserveFormatting = True
Gruß
Franz
        With .QueryTables.Add(Connection:="TEXT;" & strFolder & arrFiles(intI), _
Destination:=wks.Range("$A$1"))
.Name = arrSheets(intI)             'Name der Querry - im Prinzip beliebig
.FieldNames = True                  'Importdaten haben Spaltentitel
.RowNumbers = False                 'Zeilen beim Import nummerieren - nicht Txt
.FillAdjacentFormulas = False       'Zellformeln im benachbarten Bereich vervollstä _
ndigen
.PreserveFormatting = True          'Zell-Formatierung beim aktualisien erhalten
.RefreshOnFileOpen = False          'Abfrage beim Öffnen der datei aktualisieren
.RefreshStyle = xlInsertDeleteCells 'Zellverhalten beim Aktualisieren
.SavePassword = False
.SaveData = False
.AdjustColumnWidth = True           'Spaltenbreiten beim Import anpassen
.RefreshPeriod = 0                  'Aktualisierungsfrequenz in Minuten
.TextFilePromptOnRefresh = False    'Bei Querrybereich mit Abfrage vor  _
Aktualisierung _
nach Dateiname fragen
.TextFilePlatform = 850             'Zeichensatz für Import - hier Westeuropäisch ( _
DOS)
.TextFileStartRow = 1               'Daten Einlesen ab dieser Zeile
.TextFileParseType = xlDelimited    'Text hat Trennzeichen
.TextFileTextQualifier = xlTextQualifierDoubleQuote 'Kennzeichen für Texte
.TextFileConsecutiveDelimiter = False 'Behandlung von Trennzeichen ohne Text  _
dazwischen
'zu verwendende Trennzeichen
.TextFileTabDelimiter = False       'Tabulator
.TextFileSemicolonDelimiter = False 'Semikolon
.TextFileCommaDelimiter = False     'Komma
.TextFileSpaceDelimiter = False     'Leerzeichen
.TextFileOtherDelimiter = "#"       'anderes Zeichen
'Formate für die Spalten beim Import vorgeben
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True 'Behandlung von Minuszeichen bei Zahlen
.Refresh BackgroundQuery:=False 'Querry im Hintergrund aktualisieren
End With

Anzeige
AW: Text-Dateien automatisch einlesen
05.03.2014 08:33:34
Thomas
Super - danke für die umfassende und perfekte Hilfe!
LG,
Tommi

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige