VBA - erste Zeilen aus mehreren .txt Dateien in Excel importieren
Hallo beisammen,
bin kurz vor dem verzweifeln und benötige Hilfe.
ich möchte aus vielen .txt - Dateien nur die ersten 20 Zeilen in Excel importieren.
Es handelt sich um Messdaten die wie folgt in der .txt Dateien hinterlegt sind:
Run Label: Bernd-20121022-082146
Run Time: 22-Okt-2012 08:21
Device Serial: 45353763739
Method: Wurschd
Barr: Wurschd
Ba ID: 7777432
ID: 8834666
Result: Pass
User Name: Bernd
Login Time: 22-Okt-2012 08:20
Software Version: 4.88.42 (6697)
Last Tested: 22-Okt-2012 08:16
Last Test Result: Pass
Calibration Check: Pass
CCD Check: Pass
Laser Power: Pass
Warnings: None
samplespec 33 [response corrected]
-22915695 24.518190
-884929 24.202
-869773 24.3041
Folgendes Scripte habe ich schon soweit und funktioniert auch soweit.
Jedoch sollte die Zeile "Warnings: None" die letzte Zeile sein die immer eingelesen wird.
Wäre über Eure Hilfe dankbar.
Code:
Viele Grüße und im Voraus vielen Dank!
Bernd
bin kurz vor dem verzweifeln und benötige Hilfe.
ich möchte aus vielen .txt - Dateien nur die ersten 20 Zeilen in Excel importieren.
Es handelt sich um Messdaten die wie folgt in der .txt Dateien hinterlegt sind:
Run Label: Bernd-20121022-082146
Run Time: 22-Okt-2012 08:21
Device Serial: 45353763739
Method: Wurschd
Barr: Wurschd
Ba ID: 7777432
ID: 8834666
Result: Pass
User Name: Bernd
Login Time: 22-Okt-2012 08:20
Software Version: 4.88.42 (6697)
Last Tested: 22-Okt-2012 08:16
Last Test Result: Pass
Calibration Check: Pass
CCD Check: Pass
Laser Power: Pass
Warnings: None
samplespec 33 [response corrected]
-22915695 24.518190
-884929 24.202
-869773 24.3041
Folgendes Scripte habe ich schon soweit und funktioniert auch soweit.
Jedoch sollte die Zeile "Warnings: None" die letzte Zeile sein die immer eingelesen wird.
Wäre über Eure Hilfe dankbar.
Code:
Sub Alle_txt_Dateien_importiern()
Dim strFile$
Const strPfad$ = "C:\Testordner\"
strFile = Dir(strPfad & "*Messdaten*.txt", vbNormal)
Do Until Len(strFile) = 0
With ActiveSheet
.Cells(.Rows.Count, 2).End(xlUp).Offset(1, -1) = strFile
With .QueryTables.Add(Connection:="TEXT;" & strPfad & strFile, _
Destination:=.Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0))
.AdjustColumnWidth = True
.TextFileParseType = xlDelimited
.TextFileSpaceDelimiter = False 'Leerzeichen
.TextFileCommaDelimiter = True 'Komma
.Refresh BackgroundQuery:=False
End With
End With
strFile = Dir$
Loop
End Sub
Bernd
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 193841
Url: https://administrator.de/contentid/193841
Ausgedruckt am: 08.11.2024 um 09:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo berndk!
Ich würde das etwas anders schreiben:
Grüße
bastla
P.S.: Die Formatierung als "Code" lässt sich auch nachträglich noch vornehmen ...
Ich würde das etwas anders schreiben:
Sub Alle_txt_Dateien_importiern()
Const strPfad$ = "C:\Testordner\"
Set fso = CreateObject("Scripting.FileSystemObject")
strFile = Dir(strPfad & "*Messdaten*.txt", vbNormal)
Rw = Cells(Rows.Count, 2).End(xlUp).Row
Do Until Len(strFile) = 0
Cells(Rw, "A").Value = strFile
For Each Line In Split(fso.OpenTextFile(strPfad & strFile).ReadAll, vbNewLine)
Cells(Rw, "B") = Line
Rw = Rw + 1
If InStr(Line, "Warnings: None") > 0 Then Exit For
Next
Rw = Rw + 1 'Zeilenabstand nach Datei
strFile = Dir$
Loop
Columns("A:B").AutoFit
End Sub
bastla
P.S.: Die Formatierung als "Code" lässt sich auch nachträglich noch vornehmen ...
Hallo berndk!
Ich habe mit Deinem oben geposteten Beispiel
(als "Messdaten1.txt" gespeichert) getestet und als Ergebnis
erhalten - versuch das doch bitte auch und vergleiche dann bitte eine Deiner Dateien mit der Testdatei, um die Ursache dafür, dass es bei Dir nicht funktioniert, zu finden ...
Grüße
bastla
Ich habe mit Deinem oben geposteten Beispiel
Run Label: Bernd-20121022-082146
Run Time: 22-Okt-2012 08:21
Device Serial: 45353763739
Method: Wurschd
Barr: Wurschd
Ba ID: 7777432
ID: 8834666
Result: Pass
User Name: Bernd
Login Time: 22-Okt-2012 08:20
Software Version: 4.88.42 (6697)
Last Tested: 22-Okt-2012 08:16
Last Test Result: Pass
Calibration Check: Pass
CCD Check: Pass
Laser Power: Pass
Warnings: None
samplespec 33 [response corrected]
-22915695 24.518190
-884929 24.202
-869773 24.3041
......
......
......
Messdaten1.txt Run Label: Bernd-20121022-082146
Run Time: 22-Okt-2012 08:21
Device Serial: 45353763739
Method: Wurschd
Barr: Wurschd
Ba ID: 7777432
ID: 8834666
Result: Pass
User Name: Bernd
Login Time: 22-Okt-2012 08:20
Software Version: 4.88.42 (6697)
Last Tested: 22-Okt-2012 08:16
Last Test Result: Pass
Calibration Check: Pass
CCD Check: Pass
Laser Power: Pass
Warnings: None
Grüße
bastla
Hallo berndk!
Im Hinblick darauf, dass per "
Falls das die Ursache war, sollte es so funktionieren:
Grüße
bastla
Im Hinblick darauf, dass per "
ReadAll
" ja eigentlich einfach der gesamte Dateiinhalt gelesen wird, dürfte der Fehler eigentlich nur bei einer leeren Textdatei auftreten ...Falls das die Ursache war, sollte es so funktionieren:
Sub Alle_txt_Dateien_importiern()
Const strPfad$ = "C:\Testordner\"
Set fso = CreateObject("Scripting.FileSystemObject")
strFile = Dir(strPfad & "*Messdaten*.txt", vbNormal)
Rw = Cells(Rows.Count, 2).End(xlUp).Row
Do Until Len(strFile) = 0
Cells(Rw, "A").Value = strFile
Set FileIn = fso.OpenTextFile(strPfad & strFile, 1, False, True)
If Not FileIn.AtEndOfStream Then
For Each Line In Split(FileIn.ReadAll, vbNewLine)
Cells(Rw, "B") = Line
Rw = Rw + 1
If InStr(Line, "Warnings: None") > 0 Then Exit For
Next
End If
Rw = Rw + 1 'Zeilenabstand nach Datei
FileIn.Close
strFile = Dir$
Loop
Columns("A:B").AutoFit
End Sub
bastla
Hallo berndk!
Versuch es damit:
Grüße
bastla
Versuch es damit:
Sub Alle_txt_Dateien_importiern()
Const strPfad$ = "C:\Testordner\"
Set fso = CreateObject("Scripting.FileSystemObject")
strFile = Dir(strPfad & "*Messdaten*.txt", vbNormal)
FieldsMax = 0
Rw = Cells(Rows.Count, 2).End(xlUp).Row
Do Until Len(strFile) = 0
Cells(Rw, "A").Value = strFile
Set FileIn = fso.OpenTextFile(strPfad & strFile)
If Not FileIn.AtEndOfStream Then
For Each Line In Split(FileIn.ReadAll, vbNewLine)
Fields = Split(Line, vbTab) 'anhand TAB in Felder zerlegen
FieldsCount = UBound(Fields) + 1 'Feldanzahl ermitteln
If FieldsCount < 1 Then FieldsCount = 1 'bei leeren Zeilen Feldanzahl auf 1 setzen
If FieldsCount > FieldsMax Then FieldsMax = FieldsCount 'höchste Feldanzahl speichern (für AutoFit)
Cells(Rw, "B").Resize(1, FieldsCount).Value = Fields
Rw = Rw + 1
If InStr(Line, "Warnings: None") > 0 Then Exit For
Next
Rw = Rw + 1 'Zeilenabstand nach Datei
End If
FileIn.Close
strFile = Dir$
Loop
Columns("A").Resize(, FieldsMax + 1).AutoFit 'alle Spalten auf optimale Breite bringen
End Sub
bastla