PDA

Vollständige Version anzeigen : Textdatei auswählen und einlesen - was mache ich falsch


kdessen
12.04.2012, 13:51
Hallo Gemeinde,
ich wollte eine Textdatei auswählen und deren Daten einlesen. Habe dazu versucht ein kleines Makro zu schreiben, aber es ist irgendwie der Wurm drin.
Ich kann die Datei auswählen (Pfad wird übernommen - zur Probe Ausgabe in Zelle) und das Makro läuft durch, ohne eine Fehlermeldung - aber es werden keine Daten eingelesen.
Kann mal jemand drüber schauen - bin am verzweifeln.

Vorab Danke
Viele Grüße

Sub Datenimport_aus_txt_Datei()
On Error Resume Next
dat = Application.GetOpenFilename("Textdateien (*.txt), *.txt")
If dat = False Then
MsgBox "Abbruch durch Benutzer", vbInformation
Else
Range("M1") = dat 'Dateipfad wird angezeigt
End If

With ActiveSheet.QueryTables.Add(Connection:="TEXT; & dat", Destination:=Range("$A$1"))
.Name = dat
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "|"
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
'.Refresh BackgroundQuery:=False
End With

' weitere Bearbeitung
'Columns("A:A").Select
'Selection.Delete Shift:=xlToLeft
'Range("A1:K3").Select
'Range("K3").Activate
'Selection.Delete Shift:=xlUp
'Range("A2:K2").Select
'Range("K2").Activate
'Selection.Delete Shift:=xlUp
'Columns("L:W").Select
'Selection.Delete Shift:=xlToLeft
'Range("A1:K1").Select
'Range("K1").Activate
'Selection.AutoFilter
End Sub

EarlFred
12.04.2012, 14:06
Hallo Name?,

Wurm 1:
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & dat, Destination:=Range("$A$1"))

Wurm2:
.Refresh BackgroundQuery:=False
(darf nicht auskommentiert werden)

Wurm3, wenn Du wirklich abbrechen willst:
If dat = False Then
MsgBox "Abbruch durch Benutzer", vbInformation
Exit Sub
Else
Range("M1") = dat 'Dateipfad wird angezeigt
End If

Grüße
EarlFred

kdessen
12.04.2012, 14:24
Hallo EarlFred,
vielen Dank für die schnelle Antwort. Man hab ich viele Würmer ...

Wurm 2 - ist entstanden beim aufzeichnen des Makros, könnte ich auch weglassen (oder?)

Wurm 3 - hab ich noch gar nicht probiert, wollte nur das kein Fehler beim Abbruch kommt - Danke für den Hinweis

Wurm 1 - ich denke hier liegt der Fehler, aber wie sollte denn die Lösung dazu aussehen, wenn ich den Pfad "dat" übernehmen will zum Datenimport aus der Textdatei? ???

Viele Grüße und Danke

EarlFred
12.04.2012, 14:33
Hallo Name?,

die Antworten zu Deinen Nachfragen stehen allesamt bereits in meinem ersten Beitrag.

Grüße
EarlFred

kdessen
12.04.2012, 16:06
Hallo EarlFred,
habe die Korrektur welche du rot markiert hast übersehen, ich dacht du wolltest nur auf die Stelle hinweisen, aber hatter übersehen, das du die "Gänsefüsel" geändert hast.
Aber trotzdem will es bei mir nicht funktionieren.
Habe zu Testzwecken mal beide Dateien angehangen. Ich stell mich irgendwie zu d...f an?

EarlFred
12.04.2012, 16:17
Hallo,

setz doch bitte einfach um, was im ersten Post steht:
(1) Die besagte Zeile muss lauten:
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & dat, Destination:=Range("$A$1"))

(2)
.Refresh BackgroundQuery:=False
(darf nicht auskommentiert werden)
=Muss da stehen!

So geht's also:
Sub Datenimport_aus_txt_Datei()
On Error Resume Next
dat = Application.GetOpenFilename("Textdateien (*.txt), *.txt")
If dat = False Then
MsgBox "Abbruch durch Benutzer", vbInformation
Exit Sub
Else
Range("M1") = dat 'Dateipfad wird angezeigt
End If

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & dat, Destination:=Range("$A$1"))
.Name = dat
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "|"
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub

Grüße
EarlFred

kdessen
12.04.2012, 16:23
wahrscheinlich habe ich zu viel durcheinander gebracht. Ist eben so, wenn man keine richtige Ahnung hat und sich alles Stückchenweise zusammenstellt !

Ich möchte dir sehr danken für die Hilfe.

Viele Grüße - und nochmals Danke