Supportnet Computer
Planet of Tech

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

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....

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

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

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

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

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...?! ;-)

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

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!!!

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??? :-(

Antwort 11 von Marie

Zitat:
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


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
Zitat:
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....
(?!)

Antwort 15 von Marie

Zitat:
Private Sub CommandButton1_Click()
OpenTxt


was bedeutet OpenTxt??

Zitat:
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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: