Anzeige
Archiv - Navigation
1772to1776
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
Inhalt Textdatei in Zelle einlesen
22.07.2020 11:32:40
Christian
Hallo zusammen,
ich stehe vor folgender Herausforderung. Ich habe einem definierten Verzeichnis viele Textdateien mit einer bestimmten Namenstruktur.txt (z.B. XXXYYY_1.txt) abliegen. Ein eindeutiger Name ist in der Zelle H10 als Teil des Dateinamens hinterlegt (z.B, YYY). Über einen Button möchte ich das Vorbelegte Verzeichnis öffnen und möglichst den kompletten Dateinamen schon vorbelegt haben - in dem Bsp. "XXXYYY_1.txt". Wenn ich die Datei dann öffne, soll sie mir im geöffneten EXCEL-Sheet in Zelle B7 eingefügt werden.
Somit sollte ein mühevolles Suchen in einer Ablage - Öffnen der Textdatei im Editor und Inhaltmarkieren, Kopieren und Einfügen ins Excel und Schließen der Textdatei verbessert werden. Der Inhalt sollte dann in B8/B9/B10 usw weitergeführt werden - also nicht alles in eine Zelle :-).
Auf Umlaute wie ä und ü, ö sollte geachtet werden - ich glaub da heißt der Standard UTF-8
Kann mir hier eventuell jemand helfen … Sollte etwas unklar beschrieben sein, dann gerne noch einmal melden …
Viele Grüße
Christian
PS.: Anbei schon mal der erste Versuch, der aber nur tlw. funktioniert und das Problem mit den Umlauten hat:

Private Sub CommandButton6_Click()
TxtEinlesen ("P:\Ablage\XXXYYY_1.txt")
End Sub


Private Function TxtEinlesen(Dateipfad As String)
Dim Fnr As Long, TxtZeile As Variant, AusgabeArr As Variant, i As Long
If Dir(Dateipfad) "" Then
Fnr = FreeFile
Open Dateipfad For Input As #Fnr
TxtZeile = Split(Input(LOF(Fnr), #Fnr), vbCrLf)
Close #Fnr
ReDim AusgabeArr(1 To UBound(TxtZeile) + 1, 1 To 1)
For i = LBound(TxtZeile) To UBound(TxtZeile)
AusgabeArr(i + 1, 1) = TxtZeile(i)
Next i
Columns(1).ClearContents
Range("B7").Resize(UBound(TxtZeile) + 1) = AusgabeArr
End If
End Function

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

Betreff
Datum
Anwender
Anzeige
AW: Inhalt Textdatei in Zelle einlesen
22.07.2020 11:47:40
volti
Hallo Christian,
bei dieser Öffnungsmethode kann man m.W. keinen Standard angeben.
Wenn es immer Textdateien aus gleicher Quelle sind, schau doch mal mit dem Editor rein, ermittle die entsprechenden Zeichen und setze sie in den u.a. (ungetesteten) Code (statt ae, oe, ue) ein.
Der code ersetzt sie dann entsprechend.

Private Function TxtEinlesen(Dateipfad As String) Dim sData As String Dim Fnr As Long, TxtZeile As Variant, AusgabeArr As Variant, i As Long If Dir(Dateipfad) <> "" Then Fnr = FreeFile Open Dateipfad For Input As #Fnr sData = Input(LOF(Fnr), #Fnr) sData = Replace(Replace(Replace(sData, "ae", "ä"), "oe", "ö"), "ue", "ü") TxtZeile = Split(sData, vbCrLf) Close #Fnr ReDim AusgabeArr(1 To UBound(TxtZeile) + 1, 1 To 1) For i = LBound(TxtZeile) To UBound(TxtZeile) AusgabeArr(i + 1, 1) = TxtZeile(i) Next i Columns(1).ClearContents Range("B7").Resize(UBound(TxtZeile) + 1) = AusgabeArr End If End Function
viele Grüße aus Freigericht
Karl-Heinz

Anzeige
AW: Inhalt Textdatei in Zelle einlesen
22.07.2020 12:40:02
Christian
Hallo Karl-Heinz,
die Idee ist nicht schlecht, jedoch werden auch Namen mitgegeben und so wird aus einem "Michael" ein "Michäl", was nicht so gut funktioniert :-(
AW: Inhalt Textdatei in Zelle einlesen
22.07.2020 12:47:23
peterk
Hallo
Um eine UTF File zu lesen brauchst Du einen Stream
Die nachfolgende Prozedur schreibt den Textfile zeilenweise (Vorsicht: Worksheet, Row und Column anpassen!!)

Sub UTFTextLesen(ByVal DateiName As String) ' inklusive Pfad
Const adReadLine = -2 'Reads the next line from the stream
Const adReadAll = -1  'Reads all characters from the stream, from the current position to  _
EOS
Dim LineFromFile As String
Dim row_number As Long
Dim objStream As Object
Set objStream = CreateObject("ADODB.Stream")
objStream.Charset = "utf-8"
objStream.Open
objStream.LoadFromFile (DateiName)
row_number = 2
Do Until objStream.EOS                                'Gesammtes TextDok durchgehen
LineFromFile = objStream.ReadText(adReadLine)     'Zeile aus Quelldatei einlesen
Worksheets("Tabelle1").Cells(row_number, 1).Value = LineFromFile ' anpassen
row_number = row_number + 1
Loop
Set objStream = Nothing
End Sub

Wenn Du Deine Textfile noch über eine Dialogbox auswählen willst

Sub GetTextFile()
Dim objFileDialog As FileDialog
Dim SItem As Variant
Dim FilePath As String
Dim FileName As String
FilePath = "C:\Users\"  ' anpassen
FileName = "XXXXYYYY*"  ' anpassen
Set objFileDialog = Application.FileDialog(msoFileDialogFilePicker)
With objFileDialog
.AllowMultiSelect = False    'Nur eine Datei auswählbar
.InitialFileName = FilePath & FileName
.Filters.Clear
.Filters.Add "TXT", "*.txt"
.Filters.Add "ALL", "*.txt"
.FilterIndex = 1
.InitialView = msoFileDialogViewDetails
If .Show = -1 Then
For Each SItem In .SelectedItems
UTFTextLesen SItem
Next SItem
End If
End With
Set objFileDialog = Nothing
End Sub

Anzeige
AW: Inhalt Textdatei in Zelle einlesen
22.07.2020 12:54:39
Christian
Hallo Peterk,
was meinst Du genau mit "Stream", ich möchte das Einlesen ja über einen Button antriggern, der beginnt doch i.d.R. immer mit "Private Sub CommandButton7_Click()" oder wie baue ich das ganze zusammen?
Viele Grüße
Christian
AW: Inhalt Textdatei in Zelle einlesen
22.07.2020 13:04:45
peterk
Hallo
Du kannst Deine Prozedur Druch meine ersetzen

Private Sub CommandButton6_Click()
UTFTextLesen("P:\Ablage\XXXYYY_1.txt")
End Sub

Die Zeilen

row_number = 2
Worksheets("Tabelle1").Cells(row_number, 1).Value = LineFromFile
vermutlich

row_number = 7 ' ab 7. Zeile
' Tabellennamen anpassen
Worksheets("Tabelle1").Cells(row_number, 2).Value = LineFromFile ' Spalte B

Alternaitv:

Private Sub CommandButton6_Click()
GetTextFile
End Sub

Anzeige
AW: Inhalt Textdatei in Zelle einlesen
22.07.2020 13:07:56
volti
Jo Christian, nicht ganz nachgedacht. Bei Namen ist es nicht so gut...
Eine andere Öffnungsmethode für Textdateien hat Peter ja jetzt aufgezeigt.
Viele Grüße
Karl-Heinz
AW: Inhalt Textdatei in Zelle einlesen
22.07.2020 13:14:10
volti
Nachtrag:
Dein Beispiel mit dem Michael kann aber eigentlich nicht sein. Ich ging davon aus, dass die Umlaute mit Sonderzeichen (z.B. zweistelliges Chinesisch) dargestellt werden, hatte ich ja auch schon. Diese solltest Du in meinem code ja auch zum Ersetzen eintragen.
"ae" gehört nicht dazu, sind ja keine Sonderzeichen und werden deshalb auch nicht ersetzt.
VG KH
AW: Inhalt Textdatei in Zelle einlesen
23.07.2020 09:12:34
Christian
Hallo Ihr Zwei,
Perfekt … es funktioniert nun alles wie gewünscht und erleichtert uns nun wahnsinnig die Arbeit :-)
Vielen herzlichen Dank für Eure Unterstützung
Christian
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige