jojojo
Goto Top

Excel VBA: mehrere txt-Dateien importieren, Zeilenumbruch als Trennzeichen

Hallo zusammen.

seit ein paar Tagen versuche ich vergeblich (weil ich praktisch keine Ahnung von Makros bzw. VBA habe) eine Lösung für folgendes Problem zu finden:
Der Inhalt verschiedener txt-Dokumente (verschiedene Dateinamen, keine logische Reihenfolge) muss in eine Excel-Tabelle importiert werden.
Die txts befinden sich alle in dem gleichen Ordner.

Eine txt-Datei sieht wie folgt aus (Bsp.-Datensatz A):
12345
789
Ja
...(noch mehr Zahlen oder kurzer Text)
-321
8472032
Text mit vielen Zeichen und noch mehr Zeichen; und noch mehr.
noch ein Textabschnitt mit blabla


Bis auf die Zeilenumbrüche sind keine Trennzeichen vorhanden.

Die Dateien sollen so importiert werden, dass je eine Zeile aus der txt Datei in einer anderen Spalte steht:
Bsp:

A | 12345 | 789 | Ja | ... | -321 | ... | Text mit vielen Zeichen und noch mehr Zeichen, und noch mehr. | ...
B | ...

Im Netzt habe ich das hier gefunden:

Sub txtimport()
    x = Sheets(1).UsedRange.Rows.Count
    d = Dir("C:\Zielordner\*.txt")  
    
    Do While d <> ""  
        Open "C:\Zielordner\" & d For Input As #1  
            Do While Not EOF(1)
                Line Input #1, temp
                Sheets(1).Cells(x, 1) = Replace(temp, vbTab, ";")  
                x = x + 1
            Loop
        Close #1
        
        For j = 1 To x
            Text = Split(Cells(j, 1), ";")  
            For i = 0 To UBound(Text)
                Cells(j, i + 1) = Text(i)
            Next
        Next
        
        d = Dir
    Loop
End Sub

Ein Import erfolgt, allerdings werden einfach alle Zeilen der txts untereinander abgedruckt, was mir nicht weiterhilft.
Am umformulieren, sodass die Daten vernünftig abgedruckt werden (siehe Tabelle oben), bin ich bisher gescheidert...

Wenn mir jemand helfen könnte, wäre ich sehr sehr dankbar.

VG

Content-ID: 240439

Url: https://administrator.de/contentid/240439

Ausgedruckt am: 19.11.2024 um 15:11 Uhr

bastla
Lösung bastla 09.06.2014 aktualisiert um 16:13:25 Uhr
Goto Top
Hallo jojojo und willkommen im Forum!

Soferne ich Deine Problemstellung richtig verstehe (ich würde sie umformulieren auf: Importiere den gesamten Inhalt jeder Textdatei in jeweils eine Zeile, wobei die Zeilen der Textdatei auf einzelne Spalten verteilt werden sollen.), könnte das (ungetestet) so gehen:
Sub txtimport()
    x = Sheets(1).UsedRange.Rows.Count
    d = Dir("C:\Zielordner\*.txt")  
    Set fso = CreateObject("Scripting.FileSystemObject")  
    Do While d <> ""  
        T = Split(fso.OpenTextFile("C:\Zielordner\" & d).ReadAll, vbNewline)  
        Sheets(1).Cells(x, 1).Resize(1, UBound(T) + 1).Value = T
        x = x + 1
        d = Dir
    Loop
End Sub
Grüße
bastla

[Edit] Zeile 4 ergänzt [/Edit]
jojojo
jojojo 09.06.2014 aktualisiert um 15:57:57 Uhr
Goto Top
Hallo bastla,

erst einmal vielen Dank!
Ich bekomme einen Laufzeitfehler '424' bzw. Objekt erforderlich für Zeile 6 (T = Split...)

VG

EDIT: Ja. Genau so, wie du es oben formuliert hast, ist es vielleicht deutlicher.
bastla
Lösung bastla 09.06.2014 aktualisiert um 16:13:13 Uhr
Goto Top
Hallo jojojo!

Der Fehler wundert micht nicht - ich habe ja auch die Zeile 4
Set fso = CreateObject("Scripting.FileSystemObject")
unterschlagen ... face-sad

Ich trage das auch oben nach.

Grüße
bastla
jojojo
jojojo 09.06.2014 um 16:13:06 Uhr
Goto Top
Super. Vielen Dank! Das funktioniert....
radihk
radihk 16.12.2015 um 10:58:50 Uhr
Goto Top
Hallo zusammen!

genau das gleiche Problem habe ich auch! Allerdings wenn ich den Code einfüge spuckt er mir die Fehlermeldung "Pfad nicht gefunden aus".
Ich kann mit dieser Fehlermeldung leider nichts anfangen. Wäre super wenn einer von euch einen Rat hätte!!
bastla
bastla 16.12.2015 um 14:42:13 Uhr
Goto Top
Hallo radihk und willkommen im Forum!
Wäre super wenn einer von euch einen Rat hätte!!
Das wird vermutlich dauern - schließlich müssen wir uns durch die Unmenge an Informationen, die Du geliefert hast, durcharbeiten ... face-wink

Grüße
bastla
radihk
radihk 16.12.2015 um 15:25:39 Uhr
Goto Top
Sorry x)

Ich möchte eine .txt Datein in Excel importieren. Die .txt ist eine Speisekarte die wie folgt aussieht:
Pizza Salami 5,90€
Pizza mit Tomatensauce, etc.

Nun möchte ich diese so in excel importieren, dass folgendes dabei herauskommt:
Pizza Salami | Pizza mit Tomatensauce | 5,90€

Ich habe es bereits mit eiener =WENN-Formel probiert und das klappt soweit auch allerdings kopiert diese Methode lediglich die"Beschreibung der Pizza" und das bringt mich überhauptnicht weiter..

Schon einmal vielen Dank!
bastla
bastla 16.12.2015 um 15:38:51 Uhr
Goto Top
Hallo radihk!

Viel klarer ist es damit nicht - Du könntest aber eine (als "Code" formatierte) Beispieldatei posten ...

Willst Du (wie es Dein Beispiel vermuten ließe) die Reihenfolge der Felder verändern (wäre im Script nämlich nicht vorgesehen)?

Grüße
bastla
radihk
radihk 16.12.2015 um 15:49:46 Uhr
Goto Top
In spalte A1: Pizza Salami
In spalte B2: mit Tomatensauce, Käse, etc.
In spalte C1: 4,90€

So sollte es im Idealfall aussehen.

Nach dem import aus der .txt sieht es aber erst einmal so aus:

Spalte A1: Pizza Salami
Spalte A2: mit Tomatensauce, Käse, etc.
Spalte B1: 4,90€


Sub eins()
Dim Start As Integer
Start = 2
Range(Cells(1, Start), Cells(1, Start + 0)).EntireColumn.Insert
End Sub

--> damit erstelle ich eine neue Spalte und jetzt muss nur noch die "Beschreibung" in diese eingefügt werden.
radihk
radihk 17.12.2015 um 09:22:29 Uhr
Goto Top
Hat wirklich niemand ne Idee wie man das umsetzen könnte?
Bin für jede Hilfe dankbar!
radihk
radihk 17.12.2015 um 11:57:02 Uhr
Goto Top
Ich hab das jetzt mit folgendem Makro hinbekommen. Jetzt müsste das ganze nur noch in einer Schleife durchlaufen.
Jemand einen Rat?

Sub CellsCut()
'Preis
With Range("B1")
.Copy Destination:=Range("C1")
End With
Range("C1").ClearFormats
'Beschreibung
With Range("A2")
.Copy Destination:=Range("B1")
.Value = ""
End With
Range("B1").ClearFormats

'Nächste Zeile
With Range("A3")
.Copy Destination:=Range("A2")
.Value = ""
End With
Range("A2").ClearFormats


'Preis
With Range("B3")
.Copy Destination:=Range("C2")
.Value = ""
End With
Range("C2").ClearFormats

'Beschreibung
With Range("A4")
.Copy Destination:=Range("B2")
.Value = ""
End With
Range("B2").ClearFormats
End Sub