PDA

Vollständige Version anzeigen : *.txt Dateien in eine Excel einlesen.


c-Jay
19.11.2008, 07:57
Guten Morgen,
ich habe folgendes Problem.
Ich benötige ein Makro, mit dem ich mehrer *.txt dateien in eine Exceltabelle einlesen kann.

Alle txt dateien sind aus einem Programm exportiert. Sprich haben die gleiche spalten anzahl.

Desweiteren würde ich gerne beim einlesen eine zusätzliche spalten für alle datensätzte anlegen in der, der Name der txt datei gespeichert werden soll.


kann mir jemand bei dieser Aufgabe helfen.

Vielen Dank

jinx
19.11.2008, 08:02
Moin, c-Jay,

vielleicxht reicht Textdateien mit einer Zeile in Tabelle einlesen (http://www.herber.de/mailing/219404h.htm), den Namen solltest Du über .FoundFiles(iRow).Name erhalten und in die erste freie Spalte rechts eintragen können (Cells(1, Columns.Count).End(xlToLeft).Column + 1)...

c-Jay
19.11.2008, 08:43
Hi, danke erstmal für deine antwort.

hier mal ein beispiel meiner txtdateien.

kundeX.txt
##

nr;nr2;BelegDat;KtoNr;
01-2008/0002;436;20080111;68500;
01-2008/0002;1113;20080108;68250;
01-2008/0002;1115;20080121;68270;
01-2008/0002;1118;20080121;68270;
01-2008/0002;1305;20080105;68250;
02-2008/0001;810;20080105;68250;


kundeY.txt
##

nr;nr2;BelegDat;KtoNr;
06-2008/0003;436;20080111;68500;
06-2008/00051113;20080108;68250;
06-2008/0004;1115;20080121;68270;
06-2008/0008;1118;20080121;68270;
06-2008/0002;1305;20080105;68250;
05-2008/0001;810;20080105;68250;


Und die Excel Tabelle sollte dann so aussehen.

Txt | Nr. | Nr2 | BelegDat | KtoNr |
kundeX | 01-2008/0002 | 436 | 20080111 | 68500;
kundeX | 01-2008/0002 | 1113 | 20080108 | 68250;
kundeX | 01-2008/0002 | 1115 | 20080121 | 68270;
kundeX | 01-2008/0002 | 1118 | 20080121 | 68270;
kundeX | 01-2008/0002 | 1305 | 20080105 | 68250;
kundeX | 02-2008/0001 | 810 | 20080105 | 68250;
kundeY | 06-2008/0003 | 436 | 20080111 | 68500;
kundeY | 06-2008/0005 | 1113 | 20080108 | 68250;
kundeY | 06-2008/0004 | 1115 | 20080121 | 68270;
kundeY | 06-2008/0008 | 1118 | 20080121 | 68270;
kundeY | 06-2008/0002 | 1305 | 20080105 | 68250;
kundeY | 05-2008/0001 | 810 | 20080105 | 68250;

IngGi
19.11.2008, 09:33
Hallo c-Jay,

folgendes Makro liest alle Textdateien im Ordner C:\Test ein:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Option</span> <span class="TOKEN">Explicit</span>
&nbsp;
&nbsp;
<span class="TOKEN">Sub</span> Einlesen()
&nbsp;
<span class="TOKEN">Dim</span> objFSO <span class="TOKEN">As</span> Object
<span class="TOKEN">Dim</span> objFolder <span class="TOKEN">As</span> Object
<span class="TOKEN">Dim</span> objFile <span class="TOKEN">As</span> Object
<span class="TOKEN">Dim</span> strZeile <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> intFF <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
&nbsp;
<span class="TOKEN">Set</span> objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
<span class="TOKEN">Set</span> objFolder = objFSO.GetFolder(&quot;C:\Test&quot;)
&nbsp;
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> objFile <span class="TOKEN">In</span> objFolder.Files
<span class="TOKEN">If</span> Right(objFile.Name, 4) = &quot;.txt&quot; <span class="TOKEN">Then</span>
intFF = FreeFile
<span class="TOKEN">Open</span> objFile.Path <span class="TOKEN">For</span> <span class="TOKEN">Input</span> <span class="TOKEN">As</span> #intFF
<span class="TOKEN">Do</span> <span class="TOKEN">Until</span> EOF(intFF)
<span class="TOKEN">Line</span> <span class="TOKEN">Input</span> #intFF, strZeile
<span class="TOKEN">If</span> Range(&quot;A1&quot;) = &quot;&quot; <span class="TOKEN">Then</span>
Range(&quot;A1&quot;) = Left(objFile.Name, Len(objFile.Name) - 4)
Range(&quot;B1&quot;) = Split(strZeile, &quot;;&quot;)(0)
Range(&quot;C1&quot;) = Split(strZeile, &quot;;&quot;)(1)
Range(&quot;D1&quot;) = Split(strZeile, &quot;;&quot;)(2)
Range(&quot;E1&quot;) = Split(strZeile, &quot;;&quot;)(3)
<span class="TOKEN">Else</span>
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = Left(objFile.Name, Len(objFile.Name) - 4)
Cells(Rows.Count, 1).End(xlUp).Offset(0, 1) = Split(strZeile, &quot;;&quot;)(0)
Cells(Rows.Count, 1).End(xlUp).Offset(0, 2) = Split(strZeile, &quot;;&quot;)(1)
Cells(Rows.Count, 1).End(xlUp).Offset(0, 3) = Split(strZeile, &quot;;&quot;)(2)
Cells(Rows.Count, 1).End(xlUp).Offset(0, 4) = Split(strZeile, &quot;;&quot;)(3)
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Loop</span>
<span class="TOKEN">Close</span> #intFF
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> <span class="REM">'objFile</span>
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Ingolf

c-Jay
19.11.2008, 09:54
Vielen Dank. hat mir sehr weitergeholfen.

c-Jay
19.11.2008, 11:05
Nun habe ich beim einfügen nach jeder Datei die Spaltenüberschriften nocheinmal importiert.

Könnte ich dies auch umgehen ?

IngGi
19.11.2008, 11:14
Hallo c-Jay,

dazu muss man das Makro nur ein wenig umstellen:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Sub</span> Einlesen()
&nbsp;
<span class="TOKEN">Dim</span> objFSO <span class="TOKEN">As</span> Object
<span class="TOKEN">Dim</span> objFolder <span class="TOKEN">As</span> Object
<span class="TOKEN">Dim</span> objFile <span class="TOKEN">As</span> Object
<span class="TOKEN">Dim</span> strZeile <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> intFF <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
&nbsp;
<span class="TOKEN">Set</span> objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
<span class="TOKEN">Set</span> objFolder = objFSO.GetFolder(&quot;C:\Test&quot;)
&nbsp;
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> objFile <span class="TOKEN">In</span> objFolder.Files
<span class="TOKEN">If</span> Right(objFile.Name, 4) = &quot;.txt&quot; <span class="TOKEN">Then</span>
intFF = FreeFile
<span class="TOKEN">Open</span> objFile.Path <span class="TOKEN">For</span> <span class="TOKEN">Input</span> <span class="TOKEN">As</span> #intFF
<span class="TOKEN">Line</span> <span class="TOKEN">Input</span> #intFF, strZeile
<span class="TOKEN">If</span> Range(&quot;A1&quot;) = &quot;&quot; <span class="TOKEN">Then</span>
Range(&quot;B1&quot;) = Split(strZeile, &quot;;&quot;)(0)
Range(&quot;C1&quot;) = Split(strZeile, &quot;;&quot;)(1)
Range(&quot;D1&quot;) = Split(strZeile, &quot;;&quot;)(2)
Range(&quot;E1&quot;) = Split(strZeile, &quot;;&quot;)(3)
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Do</span> <span class="TOKEN">Until</span> EOF(intFF)
<span class="TOKEN">Line</span> <span class="TOKEN">Input</span> #intFF, strZeile
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = Left(objFile.Name, Len(objFile.Name) - 4)
Cells(Rows.Count, 1).End(xlUp).Offset(0, 1) = Split(strZeile, &quot;;&quot;)(0)
Cells(Rows.Count, 1).End(xlUp).Offset(0, 2) = Split(strZeile, &quot;;&quot;)(1)
Cells(Rows.Count, 1).End(xlUp).Offset(0, 3) = Split(strZeile, &quot;;&quot;)(2)
Cells(Rows.Count, 1).End(xlUp).Offset(0, 4) = Split(strZeile, &quot;;&quot;)(3)
<span class="TOKEN">Loop</span>
<span class="TOKEN">Close</span> #intFF
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> <span class="REM">'objFile</span>
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Ingolf

c-Jay
19.11.2008, 13:24
danke