Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1620to1624
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Textdatei per Amkro einlesen

Textdatei per Amkro einlesen
23.04.2018 20:52:26
silex1
Hallo,
hab hier im Forum folgendes Makro gefunden:
Sub Test_Text2Column()
Dim a As Long
Dim d, xlfile As String
a = 1
d = Dir("C:\MeinOrdner\")
Do While d  ""
If UCase(Mid(d, Len(d) - 3, 4)) = UCase(".TXT") Then   'nur TXT-files nehmen
xlfile = Mid(d, 1, Len(d) - 4) & ".xlsx"
Workbooks.OpenText Filename:=d, _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 2), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array( _
_
8, 1), _
Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1)), TrailingMinusNumbers:=True
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
MsgBox "Datei: " & d & " wurde umgesetzt und wird jetzt als " & xlfile & " gespeichert." _
_
ActiveWorkbook.SaveAs Filename:=xlfile, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
'    ActiveWindow.Close
ActiveWorkbook.Close
End If
d = Dir
Loop
d = d    'debug-stop only
End Sub
Dies liest aus einem definierten Ordner (C:\MeinOrdner\) ALLE Textdatein (xyz.txt, 1234.txt)aus und macht daraus .xlsx Datein.
Das Makro funktionierte zweimal und dann findet er die Datei plötzlich nicht mehr, obwohl er sie richtig bezeichnet (...kann Datei 'xyz.txt' nicht finden...).
Im Makro wird dann der komplette Abschnitt ab
Workbooks.OpenText Filename:=d,
markiert als Fehler.
Warum macht das Makro dies?
Und noch drei Fragen/Bitten zum Makro:
1. Kann das Makro bitte so umgebaut werden, dass ich den Ordner selber auswählen kann, wo es die Datein herholen soll und auch wieder als xlsx hinschreibt
2. Beim Einlesen werden Sonderzeichen (z.B. ß) in Symbole umgewandelt. Liegt dies an
Origin:=xlMSDOS,
und es müsste nur in xlWindows umgeschrieben werden?
3. Spalte A bis C sollen gelöscht werden nach dem einlesen. Könnte dies bitte auch mit eingebaut werden, bin da kläglich gescheitert...
Mit dankbaren Grüßen
René

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textdatei per Amkro einlesen
24.04.2018 04:25:23
Sandra
Hallo
Ich habe mir einige Gedanken gemacht, jedoch kann ich Ihnen selbst nach einigen Stunden nichts zu den Gründen einer Nichtausführung mitteilen. Jedoch trat bei mir ein anderes Probleme auf, das mir den letzten Nerv gekostet hat (dieses Problem konnte ich lösen). Bei mir trat zwar ebenfalls einmal der Fehler auf, jedoch konnte ich diesen nicht reproduzieren. Das Makro besteht aus einer Hauptprozedur sowie aus einer Funktion (vgl. auch Datei https://www.herber.de/bbs/user/121222.xlsm ).
Option Explicit
Sub Umwandlung_Textdateien()
Dim strFile, strBasis, strStartDateipfad, strZielDateipfad As String
Dim i As Integer
Application.ScreenUpdating = False
strBasis = "C:\Users\" & Application.UserName & "\"
strStartDateipfad = Dir(strBasis)
strZielDateipfad = Dir(strBasis)
strStartDateipfad = Dateipfad(strBasis, strStartDateipfad, True)
strZielDateipfad = Dateipfad(strBasis, strStartDateipfad, False)
If strStartDateipfad = "" Or strZielDateipfad = "" Then
If strStartDateipfad = "" And strZielDateipfad "" Then
MsgBox "Die Bearbeitung wurde aufgrund des fehlenden Startpfades abgebrochen!", vbOKOnly + vbCritical
ElseIf strZielDateipfad = "" And strStartDateipfad "" Then
MsgBox "Die Bearbeitung wurde aufgrund des fehlenden Zielpfades abgebrochen!", vbOKOnly + vbCritical
Else
MsgBox "Die Bearbeitung wurde aufgrund des fehlenden Startpfades und Zielpfades abgebrochen!", vbOKOnly + vbCritical
End If
Exit Sub
Else
strStartDateipfad = Dir(strStartDateipfad & "*.*")
strZielDateipfad = strZielDateipfad
i = 0
Do While strStartDateipfad ""
If UCase(Mid$(strStartDateipfad, Len(strStartDateipfad) - 3, 4)) = UCase(".TXT") Then 'nur TXT-files nehmen
strFile = strZielDateipfad & Mid$(Right$(strStartDateipfad, Len(strStartDateipfad) - InStrRev(strStartDateipfad, "\")), 1, Len(Right$(strStartDateipfad, Len(strStartDateipfad) - InStrRev(strStartDateipfad, "\"))) - 4) & ".xlsx"
Workbooks.OpenText Filename:=strStartDateipfad, _
Origin:=65000, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=True, Other:=False
Cells.Select
Cells.EntireColumn.AutoFit
'Löschung der ersten drei Spalten
Columns("A:C").Delete
Range("A1").Activate
'Unterbinden von Fehlermeldungen
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=strFile, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Close
'Reaktivierung von Fehlermeldungen
Application.DisplayAlerts = True
End If
strStartDateipfad = Dir()
'Zählung der Textdateien
i = i + 1
Loop
End If
MsgBox "Es wurden " & i & " Textdateien in Exceldateien umgewandelt.", vbOKOnly + vbInformation
Application.ScreenUpdating = True
End Sub
Private Function Dateipfad(ByVal strBasis As String, ByVal strDateipfad As String, ByVal  _
blnWert As Boolean) As String
Dim strUeberschrift As String
Dim strAntwort As String
If blnWert = True Then
strUeberschrift = "Einstellung des Startdateipfads"
ElseIf blnWert = False Then
strUeberschrift = "Einstellung des Zieldateipfads"
End If
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = strBasis
.Title = strUeberschrift
.ButtonName = "Selektion"
.InitialView = msoFileDialogViewList
If .Show = -1 Then
strDateipfad = .SelectedItems(1)
If Right(strDateipfad, 1)  "\" Then
strDateipfad = strDateipfad & "\"
Else
strDateipfad = ""
End If
End If
End With
If strDateipfad = strBasis Then
MsgBox "Sie müssen zuvor einen Ordner selektieren, bevor der Button ""Selektion"" gedrückt  _
wird.", vbCritical
Call Umwandlung_Textdateien
ElseIf strDateipfad = "" Then
strAntwort = MsgBox("Sie müssen zuvor einen Ordner selektieren, bevor der Button "" _
Selektion"" gedrückt wird.", vbAbortRetryIgnore + vbCritical)
If strAntwort = vbRetry Then
Call Umwandlung_Textdateien
ElseIf strAntwort = vbAbort Then
Exit Function
ElseIf strAntwort = vbIgnore Then
Exit Function
End If
Else
Dateipfad = strDateipfad
End If
End Function

Anzeige
AW: Textdatei per Makro einlesen
24.04.2018 12:32:19
silex1
Hallo Sandra,
vielen Dank für Deine Hilfe.
Der Anfang ist schon sehr nach meinen Wünschen.
Leider bricht das Makro mit gleicher Fehlermeldung
(...kann die Datei 'xyz.txt' nicht finden)
an gleicher Stelle wieder ab.
Workbooks.OpenText Filename:=strStartDateipfad, _
Origin:=65000, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=True, Other:=False
Sehr mysteriös...denn jede Text-Datei erkennt der Code, sagt aber dass die nicht zu finden ist?
Vielleicht kennt ja jemand die Ursache dafür?
Liegt es ggf. an der XL-Version? Meine ist 2007...
VG René
Anzeige
AW: Textdatei per Makro einlesen
24.04.2018 13:10:41
Sandra
Hallo René
Ich habe die Datei nochmals getestet und bei funktioniert diese wirklich reibungslos. Dies funktioniert mehrfach hintereinander immer ohne Probleme. Haben Sie die Exceldatei im Ordner mit den Textdateien? Bei mir funktionieren zwar beide Varianten, jedoch könnte es sein, dass hier evtl. ein Zusammenhang bestehen könnte, obwohl es nicht normal wäre.
Ich habe bei meinem geposteten Code festgestellt., dass die Zählung der Anzahl der verarbeiteten Textdateien außerhalb der If-Anweisung ist (müssen natürlich innerhalb sein. Der Bereich
End If
strStartDateipfad = Dir()
'Zählung der Textdateien
i = i + 1
Loop
muss wie folgt lauten:
'Zählung der Textdateien
i = i + 1
End If
strStartDateipfad = Dir()
Loop
Des Weiteren können Sie die Zeile "Range("A1").Activate" in "Range("A1").Select" umwandeln.
Anzeige
AW: Textdatei per Makro einlesen
24.04.2018 14:25:56
silex1
Hallo Sandra,
vielen Dank erneut. Getestet hab ich beide Varianten. Im gleichen Ordner und auch separat.
Was mir aufgefallen ist, dass nach der Auswahl des Ordners, ich erneut den Ordner auswählen muss.
Also ich starte das Makro und befinde mich in C:\Benutzer\ich
Dann navigiere ich in den Unterorder (Pfad wäre C:\Benutzer\ich\Textdatein\Name1)
Drücke ich dan "Selektion", dann springt er erneut zu C:\Benutzer\ich und ich muss erneut den Unterordner ansteuern.
Drücke ich dann nochmals "Selektion", dann kommt der Laufzeitfehler 1004 mit besagtem Text.
Vielleicht hilft es bei der Fehlersuche?
VG René
Anzeige
AW: Textdatei per Makro einlesen
24.04.2018 19:31:46
Sandra
Hallo René
Ich finde Ihre Antwort auf die Verwunderung über das doppelte Öffnen der Maske für die Ordnerauswahl sehr seltsam, da Sie selbst geschrieben haben, dass Sie das Herkunftsverzeichnis als auch das Zielverzeichnis selbst wählen möchten. Dies können Sie auch am Titel dieser Masken erkennen.
Außerdem habe ich nun den Fehler gefunden. Dieser tritt nur auf, wenn die Exceldateien in dasselbe Verzeichnis abgelegt werden wo die Textdateien sind. Mit einer kleinen Änderung passt es nun, weil der Dateipfad zu den Textdateien fehlt.
Der Programmcode heißt vollständig:
Option Explicit
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal pfad As String) As Long
Sub Umwandlung_Textdateien()
Dim strFile, strBasis, strPfad, strStartDateipfad, strZielDateipfad As String
Dim i As Integer
Dim j As Byte
Application.ScreenUpdating = False
strBasis = "C:\Users\" & Application.UserName & "\"
strStartDateipfad = Dir(strBasis)
strZielDateipfad = Dir(strBasis)
strStartDateipfad = Dateipfad(strBasis, strStartDateipfad, True)
strZielDateipfad = Dateipfad(strBasis, strStartDateipfad, False)
If strStartDateipfad = "" Or strZielDateipfad = "" Then
If strStartDateipfad = "" And strZielDateipfad "" Then
MsgBox "Die Bearbeitung wurde aufgrund des fehlenden Startpfades abgebrochen!", vbOKOnly + vbCritical
ElseIf strZielDateipfad = "" And strStartDateipfad "" Then
MsgBox "Die Bearbeitung wurde aufgrund des fehlenden Zielpfades abgebrochen!", vbOKOnly + vbCritical
Else
MsgBox "Die Bearbeitung wurde aufgrund des fehlenden Startpfades und Zielpfades abgebrochen!", vbOKOnly + vbCritical
End If
Exit Sub
Else
'Ordner werden erstellt, wenn er nicht vorhanden ist
MakeSureDirectoryPathExists (strZielDateipfad & "Excel-Dateien\")
strZielDateipfad = strZielDateipfad & "Excel-Dateien\"
'Pfad zur Datei (übergeordneter Ordner der Textdateien hinter dem die Textdateien zu finden sind)
strPfad = strStartDateipfad
'Speicherort der Dateien
strStartDateipfad = Dir(strStartDateipfad & "*.*")
i = 0
Do While strStartDateipfad ""
If UCase(Mid$(strStartDateipfad, Len(strStartDateipfad) - 3, 4)) = UCase(".TXT") Then 'nur TXT-files nehmen
strFile = strZielDateipfad & Mid$(Right$(strStartDateipfad, Len(strStartDateipfad) - InStrRev(strStartDateipfad, "\")), 1, Len(Right$(strStartDateipfad, Len(strStartDateipfad) - InStrRev(strStartDateipfad, "\"))) - 4) & ".xlsx"
Workbooks.OpenText Filename:=strPfad & strStartDateipfad, _
Origin:=65000, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=True, Other:=False
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
'Wenn der Bereich ab hier
'Umbenennung des ersten Tabellenblattes
Worksheets(1).Name = "Tabelle1"
'Ergänzung von zwei Tabellenbättern wie klassisch in Excel und Namen
For j = 2 To 3
Worksheets.Add After:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = "Tabelle" & j
Next j
Worksheets(1).Select
'bis einschließlich hier nicht gewünscht wird kann dieser ohne Probleme gelöscht werden
'Löschung der ersten drei Spalten
Columns("A:C").Delete
'Unterbinden von Fehlermeldungen
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=strFile, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Close
'Reaktivierung von Fehlermeldungen
Application.DisplayAlerts = True
'Zählung der Textdateien
i = i + 1
End If
strStartDateipfad = Dir()
Loop
End If
MsgBox "Es wurden " & i & " Textdateien in Exceldateien umgewandelt.", vbOKOnly + vbInformation
Application.ScreenUpdating = True
End Sub
Private Function Dateipfad(ByVal strBasis As String, ByVal strDateipfad As String, ByVal  _
blnWert As Boolean) As String
Dim strUeberschrift As String
Dim strAntwort As String
If blnWert = True Then
strUeberschrift = "Einstellung des Startdateipfads"
ElseIf blnWert = False Then
strUeberschrift = "Einstellung des Zieldateipfads"
End If
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = strBasis
.Title = strUeberschrift
.ButtonName = "Selektion"
.InitialView = msoFileDialogViewList
If .Show = -1 Then
strDateipfad = .SelectedItems(1)
If Right(strDateipfad, 1)  "\" Then
strDateipfad = strDateipfad & "\"
Else
strDateipfad = ""
End If
End If
End With
If strDateipfad = strBasis Then
MsgBox "Sie müssen zuvor einen Ordner selektieren, bevor der Button ""Selektion"" gedrückt  _
wird.", vbCritical
Call Umwandlung_Textdateien
ElseIf strDateipfad = "" Then
strAntwort = MsgBox("Sie müssen zuvor einen Ordner selektieren, bevor der Button "" _
Selektion"" gedrückt wird.", vbAbortRetryIgnore + vbCritical)
If strAntwort = vbRetry Then
Call Umwandlung_Textdateien
ElseIf strAntwort = vbAbort Then
Exit Function
ElseIf strAntwort = vbIgnore Then
Exit Function
End If
Else
Dateipfad = strDateipfad
End If
End Function

Anzeige
AW: Textdatei per Makro einlesen
26.04.2018 12:41:04
silex1
Hallo Sandra,
vielen vielen lieben Dank für Deine Hilfe. Funktioniert nun super und wie gewollt. Der Fehler lag wohl an mir, wie halt immer. ;-)
Also nochmals rechtherzlichsten Dank.
VG René
AW: Textdatei per Makro einlesen
24.04.2018 16:56:03
mmat
Hallo,
Nur so eine Idee:
gibt es da vielleicht Unterverzeichnisse mit der Erweiterung .txt ?
AW: Textdatei per Makro einlesen
24.04.2018 18:13:33
silex1
Hallo,
nein, Unterverzeichnisse gibt es so nicht.
Im Verzeichnis
C:\Benutzer\ich\Textdatein\
sind dann 10 Ordner mit den Namen und dort sind in jedem Ordner 2 nur Textdatein.
VG René

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige