TXT Dateien in eine Exeltabelle schreiben

Guste

Level-1
Beiträge
338
Reaktionspunkte
16
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen. Bestimmt sitzt hier irgendwo ein Makrofachmann.

Ich habe z.b 20 Txt Dateien.
Inhalt 1 Zeile mit 6 Werten durch >Komma< getrennt.

Diesen Dateiinhalt möchte ich in eine Exeltabelle einlesen.

Also so in der Art:

Öffne Datei_1.TXT
Strg A
Strg C

Öffne Exeldatei
Strg V

Öffne Datei_2.TXT
Strg A
Strg C

Öffne Exeldatei
Strg V

Hat da jemand ne Idee

Gruß Guste, und ab heute wird es Frühling
 
Was ist die Grundlage?
Soll ein Makro in Excel laufen? Soll es ein VB-Script sein? Soll es eine Hochsprache sein?
Ist ein SCADA-System im Hintergrund, über dass das angesteuert werden soll?
In welche Zelle soll der kopierte Text rein? Soll immer in neues Excel-File geöffnet werden?
Wie soll dieses benahmt werden beim Abspeichern?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja ein Makro in Exel ginge auch. Die TXT.Dateien werden auf einem Stick in einem Verzeichnis abgelegt.
Und alle Dateiinhalte sollen in das selbe Exelfile. Soll ja nachher nur eine Tabelle mit 6 Spalten ergeben.
Also bei 20 TXT.Dateien eine Exelltabelle mit 6 Spalten und 20 Zeilen

Gruß Guste
 
Hallo Guste.

Ich habe ein Excel-Makro geschrieben, das Deine beschriebenen Funktionen erfüllt. Die ganze Geschichte unterscheidet sich aber dahingehend, dass die Reihenfolge von der in Deiner Beschreibung abweicht. Das heißt: Es muss zuerst die Excel-Datei geöffnet werden, dann werden die Dateien eingelesen. Momentan ist in dem Code eine Konstante deklariert, die den Pfad zum Stick enthält.


Bitte starte Excel und gehe dann (z.B. mit Alt+F11) in den VisualBasic-Editor.

Klicke im Menü "Einfügen" auf "Modul", danach siehst Du im Projekt-Explorer das hinzugefügte Modul, das standardmäßig den Namen "Modul1" erhalten haben sollte, und es öffnet sich dessen Code-Fenster.

Der folgende Code gehört in das Code-Fenster von Modul1:



'Öffentliche Kostanten
Public Const StickPath As String = "E:\"
Public Const DefaultExt As String = ".txt"
'******************************************************



'Öffentliche Methoden
Public Sub ReadTextFilesOnStick()

'Lokale Variablen​
Dim FSO​
Dim Folder​
Dim Files​
Dim File​
Dim TextFileCount As Long​
Dim TextFileList() As String​
Dim LastRow As Long​

'*****************************************************
On Error GoTo ErrHandler​
Set FSO = CreateObject("Scripting.FileSystemObject")​
Set Folder = FSO.GetFolder(StickPath)​
Set Files = Folder.Files​
If Files.Count = 0 Then GoTo NoFilesFound​
For Each File In Files​
If Right(File.Name, 4) = DefaultExt Then​
TextFileCount = TextFileCount + 1​
ReDim Preserve TextFileList(0 To TextFileCount - 1)​
TextFileList(UBound(TextFileList())) = File.Name​
End If​
Next
If TextFileCount = 0 Then GoTo NoFilesFound​
msgtext = "Es wurden " & CStr(TextFileCount) & " Dateien gefunden:" & vbCr​
For i = LBound(TextFileList()) To UBound(TextFileList())​
msgtext = msgtext & vbCr & TextFileList(i)​
Next​
msgtext = msgtext & vbCr & vbCr & "Dateien einlesen?"​
Answer = MsgBox(msgtext, vbYesNo + vbInformation)​
If Answer = vbYes Then​
LastRow = Tabelle1.Range("A" & Tabelle1.Rows.Count).Rows.End(xlUp).Row​
If LastRow = 1 Then​
If (IsEmpty(Tabelle1.Range("A1")) = False) Then LastRow = LastRow + 1​
Else​
LastRow = Tabelle1.Range("A" & Tabelle1.Rows.Count).Rows.End(xlUp).Row + 1​
End If​
For i = LBound(TextFileList()) To UBound(TextFileList())​
Call ReadTextFileContent(TextFileList(i), LastRow)​
LastRow = Tabelle1.Range("A" & Tabelle1.Rows.Count).Rows.End(xlUp).Row + 1​
Next​
End If​

ExitSub:
Erase TextFileList()​
Exit Sub​

NoFilesFound:
MsgBox "Es wurden keine Text-Dateien gefunden.", vbOKOnly + vbInformation​
GoTo ExitSub​

ErrHandler:
MsgBox Err.Description, vbOKOnly + vbCritical, "Fehler " & Err.Number​
Resume ExitSub​

End Sub


Public Sub ReadTextFileContent(ByVal FileName As String, ByVal Row As Long, Optional ByVal Delimeter As String = ",")

'Lokale Variablen​
Dim TextFileLineCount As Long​
Dim TextFileLineContent() As String​
Dim RangeContent() As String​
'*****************************************************​
On Error GoTo ErrHandler​
txtfile = FreeFile​
Open StickPath & FileName For Input As #txtfile​
Do While Not EOF(txtfile)​
ReDim Preserve TextFileLineContent(0 To TextFileLineCount)​
Line Input #txtfile, TextFileLineContent(TextFileLineCount)​
TextFileLineCount = TextFileLineCount + 1​
Loop​
Close #txtfile​
For Line = LBound(TextFileLineContent()) To UBound(TextFileLineContent())​
RangeContent = Split(TextFileLineContent(Line), Delimeter, -1, vbTextCompare)​
For Column = 0 To UBound(RangeContent())​
Tabelle1.Cells(Row, Column + 1) = RangeContent(Column)​
Next Column
Row = Row + 1​
Next Line​

ExitSub:
Erase TextFileLineContent() 'Löscht das Datenfeld TextFileLineContent​
Erase RangeContent() 'Löscht das Datenfeld RangeContent​
Exit Sub​

ErrHandler:
MsgBox Err.Description, vbOKOnly + vbCritical, "Fehler " & Err.Number​
Resume ExitSub​

End Sub



Nach dem Einfügen des Codes muss die Konstante "StickPath" angepaßt werden. Bitte ändere den Pfad zu dem Laufwerk und dem entsprechenden Verzeichnis und eventuell Unterverzeichnissen. Bitte unbedingt am Ende der Zeichenfolge einen "\" einfügen.






Doppelklicke bitte im Projekt-Explorer auf "DieseArbeitsmappe", damit sich das entsprechende Code-Fenster öffnet.
Das nun folgende Code-Fragment gehört in das Code-Fenster von "DieseArbeitsmappe":



Private Sub Workbook_Open()
Call ReadTextFilesOnStick 'Aufruf der Prozedur "ReadTextFilesOnStick" im Modul1​
End Sub





Klicke nun bitte im Menü "Debuggen" auf "Kompilieren von VBAProject". Wenn keine Fehler gemeldet werden, schließe bitte den VisualBasic-Editor, kehre zurück zu Excel und speichere un schließe die Datei.

Wenn Du die Datei nun wieder öffnest, sollte Dir als erstes eine Meldung angezeigt werden. Wenn der Pfad existiert und der Stick Textdateien enthält, wird eine Meldung angezeigt, in der sämtliche, auf dem Stick enthaltenen *.txt angezeigt werden. Wenn Du die Meldung mit "Ja" bestätigst, werden die Dateien eingelesen.


Vielleicht soweit erstmal. Kannst Du ja 'mal ausprobieren.

VG Carsten
 
Danke Carsten für das Exelmakro. Probier ich gleich aus.
Ein Bekanner hat mir das Dosmakro gesendet. Das funzt auch

for /f "delims=" %%i in ('findstr /m "P" k:\AST\Daten\*.*') do type "%%i" >> K:\AST\NEU\daten.txt
 
Zurück
Oben