Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VBA - erste Zeilen aus mehreren .txt Dateien in Excel importieren

Frage Entwicklung VB for Applications

Mitglied: berndk

berndk (Level 1) - Jetzt verbinden

06.11.2012, aktualisiert 07.11.2012, 4219 Aufrufe, 11 Kommentare

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:

01.
Sub Alle_txt_Dateien_importiern() 
02.
 
03.
    Dim strFile$ 
04.
    Const strPfad$ = "C:\Testordner\" 
05.
    strFile = Dir(strPfad & "*Messdaten*.txt", vbNormal) 
06.
    Do Until Len(strFile) = 0 
07.
        With ActiveSheet 
08.
            .Cells(.Rows.Count, 2).End(xlUp).Offset(1, -1) = strFile 
09.
            With .QueryTables.Add(Connection:="TEXT;" & strPfad & strFile, _ 
10.
                Destination:=.Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0)) 
11.
                .AdjustColumnWidth = True 
12.
                .TextFileParseType = xlDelimited 
13.
                .TextFileSpaceDelimiter = False          'Leerzeichen 
14.
                .TextFileCommaDelimiter = True           'Komma 
15.
                .Refresh BackgroundQuery:=False 
16.
            End With 
17.
        End With 
18.
        strFile = Dir$ 
19.
    Loop 
20.
     
21.
 
22.
End Sub
Viele Grüße und im Voraus vielen Dank!

Bernd

Mitglied: bastla
06.11.2012 um 20:02 Uhr
Hallo berndk!

Ich würde das etwas anders schreiben:
01.
Sub Alle_txt_Dateien_importiern() 
02.
 
03.
Const strPfad$ = "C:\Testordner\" 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
strFile = Dir(strPfad & "*Messdaten*.txt", vbNormal) 
06.
 
07.
Rw = Cells(Rows.Count, 2).End(xlUp).Row 
08.
Do Until Len(strFile) = 0 
09.
    Cells(Rw, "A").Value = strFile 
10.
    For Each Line In Split(fso.OpenTextFile(strPfad & strFile).ReadAll, vbNewLine) 
11.
        Cells(Rw, "B") = Line 
12.
        Rw = Rw + 1 
13.
        If InStr(Line, "Warnings: None") > 0 Then Exit For 
14.
    Next 
15.
    Rw = Rw + 1 'Zeilenabstand nach Datei 
16.
    strFile = Dir$ 
17.
Loop 
18.
Columns("A:B").AutoFit 
19.
End Sub
Grüße
bastla

P.S.: Die Formatierung als "Code" lässt sich auch nachträglich noch vornehmen ...
Bitte warten ..
Mitglied: berndk
06.11.2012, aktualisiert um 20:25 Uhr
Hallo Bastla,

vielen Dank!

Ich habs jetzt eben ausprobiert, ich bin absolut nicht der Held in VBA, aber er mit diesem Script listet er mir nur die Namen der bestehenden .txt - Dateien auf.
Ich möchte aber aus dem Inhalt die ca. ersten 20 Zeilen auslesen.
Mhhh, wie bastel ich denn das Script am besten dann so um?

Viele Grüße

Bernd


Sorry, muss noch was hinzufügen, in der Spalte "B" habe ich den Code "ÿþR" stehen.
Wo kann ich denn diesen Formatieren?

Ah, ja, und danke noch für den Tip mit dem Code
Werds das nächste mal besser machen
Bitte warten ..
Mitglied: bastla
06.11.2012 um 20:27 Uhr
Hallo berndk!

Ich habe mit Deinem oben geposteten Beispiel
01.
Run Label: Bernd-20121022-082146 
02.
Run Time: 22-Okt-2012 08:21 
03.
Device Serial: 45353763739 
04.
Method: Wurschd 
05.
Barr: Wurschd 
06.
Ba ID: 7777432 
07.
ID: 8834666 
08.
 
09.
 
10.
Result: Pass 
11.
 
12.
User Name: Bernd 
13.
Login Time: 22-Okt-2012 08:20 
14.
Software Version: 4.88.42 (6697) 
15.
Last Tested: 22-Okt-2012 08:16 
16.
Last Test Result: Pass 
17.
Calibration Check: Pass 
18.
CCD Check: Pass 
19.
Laser Power: Pass 
20.
Warnings: None 
21.
 
22.
samplespec 33 [response corrected] 
23.
-22915695 24.518190 
24.
-884929 24.202 
25.
-869773 24.3041 
26.
...... 
27.
...... 
28.
......
(als "Messdaten1.txt" gespeichert) getestet und als Ergebnis
01.
Messdaten1.txt	Run Label: Bernd-20121022-082146 
02.
	Run Time: 22-Okt-2012 08:21 
03.
	Device Serial: 45353763739 
04.
	Method: Wurschd 
05.
	Barr: Wurschd 
06.
	Ba ID: 7777432 
07.
	ID: 8834666 
08.
	 
09.
	 
10.
	Result: Pass 
11.
	 
12.
	User Name: Bernd 
13.
	Login Time: 22-Okt-2012 08:20 
14.
	Software Version: 4.88.42 (6697) 
15.
	Last Tested: 22-Okt-2012 08:16 
16.
	Last Test Result: Pass 
17.
	Calibration Check: Pass 
18.
	CCD Check: Pass 
19.
	Laser Power: Pass 
20.
	Warnings: None
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
Bitte warten ..
Mitglied: berndk
06.11.2012 um 20:35 Uhr
Hi Bastla,
das versteh ich jetzt nicht, ich habe es so ausprobiert und es funktioniert prima dein Script.
Wenn ich jedoch die ursprüngliche .txt -Dateien importieren möchte, dann listet er mir nur die Bezeichnungen auf und in der Spalte "B" dann die Kryptische Zeichen: ÿþR

Die ursprünglichen .txt-Dateien sind ziemlich lang und haben ca. 4000 Zeilen, daher benötige ich nur die ca. oberen 20.

Hast du mir nen Tip?

Grüße

Bernd
Bitte warten ..
Mitglied: bastla
06.11.2012 um 20:41 Uhr
Hallo berndk!

Falls es sich um Unicode-Dateien handeln sollte, müsste die Zeile 10 geändert werden:
    For Each Line In Split(fso.OpenTextFile(strPfad & strFile, 1, False, True).ReadAll, vbNewLine)
Grüße
bastla
Bitte warten ..
Mitglied: berndk
06.11.2012 um 20:57 Uhr
Bastla,

Vielen Dank!! Erst hatte es funktioniert, jetzt bekomme ich folgende Fehlermeldung:
"Laufzeitfehler '62', Einlesen hinter Dateiende".
Diese Fehlemeldung hatte ich schon mal bei einem anderen Script und habe mich wund gegoogelt.
Sagt dir diese Meldung was?

Grüße

Bernd
Bitte warten ..
Mitglied: bastla
06.11.2012, aktualisiert um 21:44 Uhr
Hallo berndk!

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:
01.
Sub Alle_txt_Dateien_importiern() 
02.
 
03.
Const strPfad$ = "C:\Testordner\" 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
strFile = Dir(strPfad & "*Messdaten*.txt", vbNormal) 
06.
 
07.
Rw = Cells(Rows.Count, 2).End(xlUp).Row 
08.
Do Until Len(strFile) = 0 
09.
    Cells(Rw, "A").Value = strFile 
10.
    Set FileIn = fso.OpenTextFile(strPfad & strFile, 1, False, True) 
11.
    If Not FileIn.AtEndOfStream Then 
12.
        For Each Line In Split(FileIn.ReadAll, vbNewLine) 
13.
            Cells(Rw, "B") = Line 
14.
            Rw = Rw + 1 
15.
            If InStr(Line, "Warnings: None") > 0 Then Exit For 
16.
        Next 
17.
    End If 
18.
    Rw = Rw + 1 'Zeilenabstand nach Datei 
19.
    FileIn.Close 
20.
    strFile = Dir$ 
21.
Loop 
22.
Columns("A:B").AutoFit 
23.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: berndk
07.11.2012 um 08:23 Uhr
Guten Morgen bastla,

du bist der Beste!
Vielen Dank, ja, das wars.
Warum auch immer, aber eine .txt-Datei war komplett leer und hatte dann den Fehler ausgelöst.

Morgen werde ich dann probieren dass ich die Zeilen noch getrennt bekomme (TabStops) und dann sollte es passen.

Herzlichen Dank noch!!

Viele Grüße

Bernd
Bitte warten ..
Mitglied: berndk
07.11.2012 um 13:34 Uhr
Hallo bastla,

noch eine Frage, ich krieg das irgendwie nicht gebacken mit der Trennung.
Wie verbastel ich denn jetzt meine Tabstops getrennt etc... in das Script damit er mir die Daten getrennt in die Spalten schreibt?

01.
... 
02.
Destination:=.Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0)) 
03.
                .AdjustColumnWidth = True 
04.
                .TextFileParseType = xlDelimited 
05.
                .TextFileSpaceDelimiter = False          'Leerzeichen 
06.
                .TextFileCommaDelimiter = True           'Komma 
07.
                .Refresh BackgroundQuery:=False 
08.
...
Soll ja dann so aussehen:
01.
Spalte1 Spalte2  
02.
Method: Wurschd 
03.
... 
04.
....
Vielen Dank schon mal für die Antwort.

Grüße

Bernd
Bitte warten ..
Mitglied: bastla
07.11.2012 um 16:28 Uhr
Hallo berndk!

Versuch es damit:
01.
Sub Alle_txt_Dateien_importiern() 
02.
 
03.
Const strPfad$ = "C:\Testordner\" 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
strFile = Dir(strPfad & "*Messdaten*.txt", vbNormal) 
06.
 
07.
FieldsMax = 0 
08.
Rw = Cells(Rows.Count, 2).End(xlUp).Row 
09.
Do Until Len(strFile) = 0 
10.
    Cells(Rw, "A").Value = strFile 
11.
    Set FileIn = fso.OpenTextFile(strPfad & strFile) 
12.
    If Not FileIn.AtEndOfStream Then 
13.
        For Each Line In Split(FileIn.ReadAll, vbNewLine) 
14.
            Fields = Split(Line, vbTab) 'anhand TAB in Felder zerlegen 
15.
            FieldsCount = UBound(Fields) + 1 'Feldanzahl ermitteln 
16.
            If FieldsCount < 1 Then FieldsCount = 1 'bei leeren Zeilen Feldanzahl auf 1 setzen 
17.
            If FieldsCount > FieldsMax Then FieldsMax = FieldsCount 'höchste Feldanzahl speichern (für AutoFit) 
18.
            Cells(Rw, "B").Resize(1, FieldsCount).Value = Fields 
19.
            Rw = Rw + 1 
20.
            If InStr(Line, "Warnings: None") > 0 Then Exit For 
21.
        Next 
22.
        Rw = Rw + 1 'Zeilenabstand nach Datei 
23.
    End If 
24.
    FileIn.Close 
25.
    strFile = Dir$ 
26.
Loop 
27.
Columns("A").Resize(, FieldsMax + 1).AutoFit 'alle Spalten auf optimale Breite bringen 
28.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: berndk
08.11.2012 um 15:04 Uhr
Hallo bastla,

du bist absolut genial!!!
Läuft alles wunderbar, herzlichen Dank!!!!
Da hätt ich ne Ewigkeit dafür gebraucht, wenn ich es überhaupt hinbekommen hätte.

Viele Grüße

Bernd
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Microsoft Office
gelöst Txt Dateien in Excel importieren (9)

Frage von Serbitar zum Thema Microsoft Office ...

Batch & Shell
CSV-Datei nach Excel importieren (5)

Frage von mrvfbnummer2 zum Thema Batch & Shell ...

Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...