Supportnet / Forum / Tabellenkalkulation
Dateiname einer txt.-Datei in EXCEL einlesen
Frage
Guten Morgen,
ich benötige Unterstüzung!
Ich habe dieses Wochen mit Unterstütung dieses Forums (Danke nochmals an Marie!!!) eine Excel-Tabelle erstellet, die nach meine Wünschen Inhalte aus einer txt.-Datei einliest.
Wie kann ich nun noch zusätzlich den Dateiname (variabel) der jeweiligen Datei einlesen...?
Danke im Vorraus!!!
Antwort 1 von Marie
Hi stoneart,
an der Stelle, wo Du die Datei aufgerufen hast, da ist der Name unter txtName auch auslesbar.
Aber Du sagst ja nicht wo und wann Du den Dateinamen brauchst?? Du kannst ihn auch in Deiner Exceldatei speichern. Sag mal genauer wann und wozu Du den Namen brauchst.
Gruß Marie
an der Stelle, wo Du die Datei aufgerufen hast, da ist der Name unter txtName auch auslesbar.
Aber Du sagst ja nicht wo und wann Du den Dateinamen brauchst?? Du kannst ihn auch in Deiner Exceldatei speichern. Sag mal genauer wann und wozu Du den Namen brauchst.
Gruß Marie
Antwort 2 von stoneart
Hi Marie,
also die txt.-Datei beinhaltet ja Daten um einen Lieferschein zu erstellen. Der Dateiname der txt.-Datei ist gleichzeitig die Lieferscheinnummer und muss somit ebenfalls in die Excel-Datei importiert werden.
Danke....
also die txt.-Datei beinhaltet ja Daten um einen Lieferschein zu erstellen. Der Dateiname der txt.-Datei ist gleichzeitig die Lieferscheinnummer und muss somit ebenfalls in die Excel-Datei importiert werden.
Danke....
Antwort 3 von Marie
Ja ist doch kein Problem, dann schreib doch an der Stelle den Dateinamen hin, wo er hinsoll, zum Beispiel:
https://supportnet.de/threads/1633138
For inti = 1 To 9 ' 9 Durchläufe für täglich max 9 textdateien
txtName = StrPath & "\" & strHeute & inti & ".txt"
If FileExist(txtName) Then
' Hier schreibst Du den Dateinamen zum Beispiel in Tabelle 1 Zeile 2,Spalte 3, setz da eine Zahl oder eine Variable ein
Tabelle1.Cells(2, 3) = txtname
' Hier importierst Du Deine txt.datei
' Dann gleich verschieben in anderes Verzeichnis
FileCopy txtName, strCopypath & strHeute & inti & ".txt"
Kill txtName
End If
Next
https://supportnet.de/threads/1633138
For inti = 1 To 9 ' 9 Durchläufe für täglich max 9 textdateien
txtName = StrPath & "\" & strHeute & inti & ".txt"
If FileExist(txtName) Then
' Hier schreibst Du den Dateinamen zum Beispiel in Tabelle 1 Zeile 2,Spalte 3, setz da eine Zahl oder eine Variable ein
Tabelle1.Cells(2, 3) = txtname
' Hier importierst Du Deine txt.datei
' Dann gleich verschieben in anderes Verzeichnis
FileCopy txtName, strCopypath & strHeute & inti & ".txt"
Kill txtName
End If
Next
Antwort 4 von stoneart
...sorry, bin da anscheinend nicht so blickig...beschäftig mich zu ersten mal mit VBA...
Hab das an dieser Stelle (s.u.) eingefügt!
Passiert leider nix!!!
Was mache ich falsch...?!
For inti = 1 To 9 ' 9 Durchläufe für täglich max 9 textdateien
txtName = StrPath & "\" & strHeute & inti & ".txt"
If FileExist(txtName) Then
Tabelle4.Cells(30, 5) = txtName
Open txtName For Input As #1
n = 3
While Not EOF(1)
Line Input #1, z
a = Split(z, Space(1))
For i = 0 To UBound(a)
Cells(i + 1, n) = a(n)
Next
n = n + 1
Wend
Close #1
Hab das an dieser Stelle (s.u.) eingefügt!
Passiert leider nix!!!
Was mache ich falsch...?!
For inti = 1 To 9 ' 9 Durchläufe für täglich max 9 textdateien
txtName = StrPath & "\" & strHeute & inti & ".txt"
If FileExist(txtName) Then
Tabelle4.Cells(30, 5) = txtName
Open txtName For Input As #1
n = 3
While Not EOF(1)
Line Input #1, z
a = Split(z, Space(1))
For i = 0 To UBound(a)
Cells(i + 1, n) = a(n)
Next
n = n + 1
Wend
Close #1
Antwort 5 von Marie
Gar nix machst Du falsch, vorausgesetzt Du hast eine Tabelle 4 und dort in Zeile 30 Spalte E gesucht, muss der Name deiner TXT jetzt dort stehen.
Gruß marie
Gruß marie
Antwort 6 von Marie
äh sorry, vorausgesetzt Du hast eine 12117000y.txt mit y = eine Ziffer von 1 bis 9, die Du noch nicht verschoben hast. :-))
Gruß Marie
Gruß Marie
Antwort 7 von stoneart
Guten Morgen,
....Du hast eine Tabelle 4 und dort in Zeile 30 Spalte E gesucht, muss der Name deiner TXT jetzt dort stehen.
...also ich habe eine Tabelle4 und in Zeile 30 Spalte E gesucht...
da ist wirklich nix...?! ;-)
....Du hast eine Tabelle 4 und dort in Zeile 30 Spalte E gesucht, muss der Name deiner TXT jetzt dort stehen.
...also ich habe eine Tabelle4 und in Zeile 30 Spalte E gesucht...
da ist wirklich nix...?! ;-)
Antwort 8 von Marie
und Du hast auch eine 13117000y.txt mit y = eine Ziffer von 1 bis 9, die Du noch nicht verschoben hast in dem Verzeichnis, das durchsucht wird? Und Dein PC-Datum ist der 13.11.2007.
bei mir funktioniert der Code, geh halt mal im Einzelschritt durch
oder schreib mal folgendes:
If FileExist(txtName) Then
MSGBox txtName
Tabelle4.Cells(30, 5) = txtName
Wenn Du keine MSGBox zu sehen bekommst, dann kann auch nix in der Zeile stehen, weil keine Datei vorhanden ist die 13117000y.txt heisst mit y = eine Ziffer von 1 bis 9
Gruß Marie
bei mir funktioniert der Code, geh halt mal im Einzelschritt durch
oder schreib mal folgendes:
If FileExist(txtName) Then
MSGBox txtName
Tabelle4.Cells(30, 5) = txtName
Wenn Du keine MSGBox zu sehen bekommst, dann kann auch nix in der Zeile stehen, weil keine Datei vorhanden ist die 13117000y.txt heisst mit y = eine Ziffer von 1 bis 9
Gruß Marie
Antwort 9 von stoneart
...so jetzt wird mir an der gewünschten Stelle der Dateiname inkl. Pfad angezeigt... (...warum nun der ganze Pfad?)
Ich hatte zuvor folgende Codeänderung "eigenmächtig" vorgenommen:
'am 10.11.2007 ist jetzt strHeute = "10117"
' Nun 00 anhängen und dann 9 dateien durchlaufen
' Wenn es täglich mehr als 9 werden:
' neue Schleife machen mit einer führenden 0 weniger und Durchläufe von 10 bis 99 max
strHeute = strHeute & "00"
'hier das Verzeichnis der txts einfügen zum Beispiel: StrPath = "F:\temp"
...da sich der Dateiname wie folgt zusammensetzt: "1411700y.txt"
(nicht wie fälschlicherweise wie angenommen "14117000y.txt") Sorry, mein Fehler... dachte das wäre nicht so wichtig, da der Inhaltsimport ja funktioniert hat. Warum aber der Dateinamenimport nicht?
@Marie: hast dir langsam ne Kiste Sekt verdient!!!
Danke vielmals!!!
Ich hatte zuvor folgende Codeänderung "eigenmächtig" vorgenommen:
'am 10.11.2007 ist jetzt strHeute = "10117"
' Nun 00 anhängen und dann 9 dateien durchlaufen
' Wenn es täglich mehr als 9 werden:
' neue Schleife machen mit einer führenden 0 weniger und Durchläufe von 10 bis 99 max
strHeute = strHeute & "00"
'hier das Verzeichnis der txts einfügen zum Beispiel: StrPath = "F:\temp"
...da sich der Dateiname wie folgt zusammensetzt: "1411700y.txt"
(nicht wie fälschlicherweise wie angenommen "14117000y.txt") Sorry, mein Fehler... dachte das wäre nicht so wichtig, da der Inhaltsimport ja funktioniert hat. Warum aber der Dateinamenimport nicht?
@Marie: hast dir langsam ne Kiste Sekt verdient!!!
Danke vielmals!!!
Antwort 10 von stoneart
... so, das jetzt nur noch der Dateiname und nich der gesamte Pfad angegeben wird funktioniert...
Tabelle4.Cells(31, 5) = strHeute & inti
..aber immer noch nicht, wenn sich der Dateiname zwischen dem Datumsbestandteil und der Variablen aus "00" anstatt "000" zusammensetzt...
strHeute = strHeute & "00"
Was mache ich falsch??? :-(
Tabelle4.Cells(31, 5) = strHeute & inti
..aber immer noch nicht, wenn sich der Dateiname zwischen dem Datumsbestandteil und der Variablen aus "00" anstatt "000" zusammensetzt...
strHeute = strHeute & "00"
Was mache ich falsch??? :-(
Antwort 11 von Marie
Zitat:
Was mache ich falsch??? :-(
Was mache ich falsch??? :-(
Mich nicht ausreichend informieren. Und dann ein neues Posting anfangen, kein Mensch kann hier den Code sehen? :-((
Also jetzt poste einfach hier nochmal den gesamten von Dir veränderten Code rein, dass ich sehe was Du verwurschtelt hast.
Gruß Marie
Antwort 12 von stoneart
Sorry... :-/
Hier mein Code:
Private Sub CommandButton1_Click()
OpenTxt
Dim StrPath As String
Dim txtName As String
Dim strHeute As String
Dim intLaen As Integer
Dim intDot As Integer
Dim inti As Integer
Dim strCopypath As String
strHeute = Date 'String splitten und Punkte entfernen:
Do While InStr(1, strHeute, ".") > 0
intLaen = Len(strHeute)
intDot = InStr(1, strHeute, ".")
strHeute = Left$(strHeute, intDot - 1) & Right$(strHeute, intLaen - intDot)
Loop
'am 10.11.2007 ist jetzt strHeute = "10112007"
' Du willst aber die Jahreszahl einstellig, ab 0010 zweistellig:
If Year(Date) < 2010 Then
strHeute = Left$(strHeute, 4) & Right$(strHeute, 1)
Else
strHeute = Left$(strHeute, 4) & Right$(strHeute, 2)
End If
'am 10.11.2007 ist jetzt strHeute = "10117"
' Nun 00 anhängen und dann 9 dateien durchlaufen
' Wenn es täglich mehr als 9 werden:
' neue Schleife machen mit einer führenden 0 weniger und Durchläufe von 10 bis 99 max
strHeute = strHeute & "00"
'hier das Verzeichnis der txts einfügen zum Beispiel: StrPath = "F:\temp"
StrPath = "C:\Dokumente und Einstellungen\PC1\Desktop\"
StrPath = ThisWorkbook.Path
strCopypath = "C:\Dokumente und Einstellungen\PC1\Desktop\neu\" ' Pfad wo hinverschoben werden soll mit Backslash hinten'
For inti = 1 To 9 ' 9 Durchläufe für täglich max 9 textdateien
txtName = StrPath & "\" & strHeute & inti & ".txt"
If FileExist(txtName) Then
Tabelle4.Cells(32, 5) = strHeute & inti
Open txtName For Input As #1
i = 1
While Not EOF(1)
Line Input #1, z
a = Split(z, Space(1))
For n = 0 To UBound(a)
Cells(n + 1, i) = a(n)
Next
i = i + 1
Wend
Close #1
' Hier importierst Du Deine txt.datei
' Dann gleich verschieben in anderes Verzeichnis
FileCopy txtName, strCopypath & strHeute & inti & ".txt"
Kill txtName
End If
Next
End Sub
Function FileExist(ByVal file As String) As Integer
' True wenn Datei vorhanden, False wenn nicht vorhanden
Dim f
f = FreeFile
On Error GoTo FileExistError
Open file For Input Access Read As #f
Close #f
FileExist = True
Exit Function
FileExistError:
FileExist = False
Exit Function
End Function
Hier mein Code:
Private Sub CommandButton1_Click()
OpenTxt
Dim StrPath As String
Dim txtName As String
Dim strHeute As String
Dim intLaen As Integer
Dim intDot As Integer
Dim inti As Integer
Dim strCopypath As String
strHeute = Date 'String splitten und Punkte entfernen:
Do While InStr(1, strHeute, ".") > 0
intLaen = Len(strHeute)
intDot = InStr(1, strHeute, ".")
strHeute = Left$(strHeute, intDot - 1) & Right$(strHeute, intLaen - intDot)
Loop
'am 10.11.2007 ist jetzt strHeute = "10112007"
' Du willst aber die Jahreszahl einstellig, ab 0010 zweistellig:
If Year(Date) < 2010 Then
strHeute = Left$(strHeute, 4) & Right$(strHeute, 1)
Else
strHeute = Left$(strHeute, 4) & Right$(strHeute, 2)
End If
'am 10.11.2007 ist jetzt strHeute = "10117"
' Nun 00 anhängen und dann 9 dateien durchlaufen
' Wenn es täglich mehr als 9 werden:
' neue Schleife machen mit einer führenden 0 weniger und Durchläufe von 10 bis 99 max
strHeute = strHeute & "00"
'hier das Verzeichnis der txts einfügen zum Beispiel: StrPath = "F:\temp"
StrPath = "C:\Dokumente und Einstellungen\PC1\Desktop\"
StrPath = ThisWorkbook.Path
strCopypath = "C:\Dokumente und Einstellungen\PC1\Desktop\neu\" ' Pfad wo hinverschoben werden soll mit Backslash hinten'
For inti = 1 To 9 ' 9 Durchläufe für täglich max 9 textdateien
txtName = StrPath & "\" & strHeute & inti & ".txt"
If FileExist(txtName) Then
Tabelle4.Cells(32, 5) = strHeute & inti
Open txtName For Input As #1
i = 1
While Not EOF(1)
Line Input #1, z
a = Split(z, Space(1))
For n = 0 To UBound(a)
Cells(n + 1, i) = a(n)
Next
i = i + 1
Wend
Close #1
' Hier importierst Du Deine txt.datei
' Dann gleich verschieben in anderes Verzeichnis
FileCopy txtName, strCopypath & strHeute & inti & ".txt"
Kill txtName
End If
Next
End Sub
Function FileExist(ByVal file As String) As Integer
' True wenn Datei vorhanden, False wenn nicht vorhanden
Dim f
f = FreeFile
On Error GoTo FileExistError
Open file For Input Access Read As #f
Close #f
FileExist = True
Exit Function
FileExistError:
FileExist = False
Exit Function
End Function
Antwort 13 von Marie
hm Du schreibst ja immer in dieselbe zelle.
Tabelle4.Cells(32, 5) = strHeute & inti
Das heisst hier steht immer nur die zuletzt importierte Datei.
Lösch mal den Inhalt, dann merkste, ob Du überhaupt hier reinläufst, ich vermute mal, dass der alte Wert da noch dringestanden hat.
dann schreibst Du bitte mal hinter
msgbox strHeute & inti
wenn eine msgbox erscheint muss auch der text in Tabelle4.Cells(32, 5) erscheinen, wenn nicht wurde keine Datei gefunden von heute mit 1411700y
Gruß marie
Tabelle4.Cells(32, 5) = strHeute & inti
Das heisst hier steht immer nur die zuletzt importierte Datei.
Lösch mal den Inhalt, dann merkste, ob Du überhaupt hier reinläufst, ich vermute mal, dass der alte Wert da noch dringestanden hat.
dann schreibst Du bitte mal hinter
Zitat:
If FileExist(txtName) Then
If FileExist(txtName) Then
msgbox strHeute & inti
wenn eine msgbox erscheint muss auch der text in Tabelle4.Cells(32, 5) erscheinen, wenn nicht wurde keine Datei gefunden von heute mit 1411700y
Gruß marie
Antwort 14 von stoneart
...also...
wenn ich eine Datei "14117000y.txt" einlesen möchte und den Code auf
strHeute = strHeute & "000"
programmiere funktioniert alles wie gewünscht... der Inhalt wird eingelesen und der Dateiname wird dargestellt (auch wenn ich die msgbox anwende).
meine erzeugte txt Datei hat jedoch das Format "1411700y.txt" Wenn ich den Code somit ändere
strHeute = strHeute & "00"
liest er mir den Inhalt der Datei ein und verschiebt sie auch wie gewünscht. Der Dateiname wird jedoch nicht dargestellt.
d.h. die Datei existiert.... ich lösche bei jedem neuen Versuch auch Excel-Tabelle um sicher zu sein, das der Inhalt wirklich neu eingelesen wird....
(?!)
wenn ich eine Datei "14117000y.txt" einlesen möchte und den Code auf
strHeute = strHeute & "000"
programmiere funktioniert alles wie gewünscht... der Inhalt wird eingelesen und der Dateiname wird dargestellt (auch wenn ich die msgbox anwende).
meine erzeugte txt Datei hat jedoch das Format "1411700y.txt" Wenn ich den Code somit ändere
strHeute = strHeute & "00"
liest er mir den Inhalt der Datei ein und verschiebt sie auch wie gewünscht. Der Dateiname wird jedoch nicht dargestellt.
d.h. die Datei existiert.... ich lösche bei jedem neuen Versuch auch Excel-Tabelle um sicher zu sein, das der Inhalt wirklich neu eingelesen wird....
(?!)
Antwort 15 von Marie
Zitat:
Private Sub CommandButton1_Click()
OpenTxt
Private Sub CommandButton1_Click()
OpenTxt
was bedeutet OpenTxt??
Zitat:
StrPath = "C:\Dokumente und Einstellungen\PC1\Desktop\"
StrPath = ThisWorkbook.Path
StrPath = "C:\Dokumente und Einstellungen\PC1\Desktop\"
StrPath = ThisWorkbook.Path
Was hast Du hier gefuschelt? Welches ist denn nun der Pfad Deiner Textdatei?? entscheide dich mal für einen und lösch die andere zeile raus.
Der Code funktioniert absolut so wie er soll, was Du rumfuschelst ist mir schleierhaft. Ich habe eine Datei 14117005.txt, die wird mir genauso eingetragen wie jede andere, ob mit 3 oder mit 2 oder mit 5 Nullen.
Gruß marie
Antwort 16 von stoneart
... du hast wohl recht hier war geballtes Halbwissen meinerseits am Werke... sorry is sicher nervig!
habs jetzt aber hab mein "gefuschel" gelöscht und nu is alles prima... Hauptverursacher war das OpenTxt... wo auch immer das herkam... ;-)
Also nochmals vielen Dank für alles!
Bin sehr begeistert und auch ein wenig beschämt von deinem selbstlosen Support!
LG Martin
habs jetzt aber hab mein "gefuschel" gelöscht und nu is alles prima... Hauptverursacher war das OpenTxt... wo auch immer das herkam... ;-)
Also nochmals vielen Dank für alles!
Bin sehr begeistert und auch ein wenig beschämt von deinem selbstlosen Support!
LG Martin