beliebige txt Datei in EXCE Datei einlesen
Guten Tag....
ich habe mir hier m Forum schon sehr viele hilfreiche Tips holen können. Ich hoffe "ihr" könnt mir bei meinem speziellen Problem auch weiterhelfen.
Ich möchte "ganz einfach" eine txt Datei in eine Vorlagen-EXCEL Datei zur weiterverarbeitung importieren, dessen Dateiname jedoch variabel ist...
Es ist so, dass ich von einem externen Geräte eine txt Datei generiert bekomme des Name sich aus dem aktuellen Datum sowie der Anzahl, der pro Tag generierten Dateien zusammen setzt (ttmmjanz.) . z.B. "101170001.txt"
Diese Datei wird immer in dem gleichen Ordner abgelegt und nach dem Import verschoben.
Gibt es hier überhaupt eine Möglichkeit?
Vielen Dank schon mal!
mfg
Martin
Antwort schreiben
Antwort 1 von Marie vom 10.11.2019, 15:44 Options
Zitat:
aktuellen Datum sowie der Anzahl, der pro Tag generierten Dateien zusammen setzt (ttmmjanz.) . z.B. "101170001.txt"
mit "101170001.txt" kann ich nun wirklich absolut nichts anfangen, ich gehe mal davon aus die Jahreszahl soll vierstellig sein und nicht 7000 heissen sondern 2007??
Wie viele Dateien sind das maximal pro Tag, kann ich eingrenzen for i = 1 to maxzahl??? das wäre einfacher.
Und noch ne Frage: Soll ich die textdatei nach dem Import verschieben?? Wenn ja wohin.
Und wenn Du noch sagst wie das Verzeichnis heisst, wo die textdateien sind, dann kann ich es gleicch einfügen.
Gruß Marie
Antwort 2 von stoneart vom 10.11.2019, 16:21 Options
Hallo Marie,
zunächst vielen Dank für die promte Reaktion!!!
...also der Dateiname ist schon richtig so... (101170001.txt) die 10 für den Tag die 11 für den Monat und die 7 für das Jahr und die 0001 ist die laufende Nummerierung der generierten Dateien
Pro Tag werden z.Z. nicht mehr als 5 txt-Dateien generiert. Nach dem die txt-Datei importiert wurde soll diese in einen definierten Ordner verschoben werden um eine "doppelten Import" und anschließenden Ausdruck zu vermeiden.
Danke nochmals...
Martin
Antwort 3 von Marie vom 10.11.2019, 16:36 Options
Ja Mist, jetzt hab ich mit Mühe die Punkte aus dem Datum rausgemacht, was denn nu?? ich könnte noch verstehen, wenn Du die Jahreszahl zweistellig aausgeben würdet, aber einstellig und dann führende Nullen vor der Nummer?? Und was machen wir dann 2010??????
Also unten in dem Code ist jetzt strHeute = "10112007", Nun wollte ich die Durchlaüfe dranhängen. Nun muss ich wohl von der Jahreszahl alles abtrennen ausser der letzten Ziffer und ab 2010 den Code ändern. Ferner muss ich drei idiotische Nullen reinschreiben, die niemals benutzt werden, wenn maximal 5 Dateien vorhanden sind. :-((
Sub OpenTxt()
Dim StrPath As String
Dim txtName As String
Dim strHeute As String
Dim intLaen As Integer
Dim intDot As Integer
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
End Sub
Antwort 4 von stoneart vom 10.11.2019, 17:03 Options
....Danke für die Hilfe aber dieser Ansatz führt leider nicht zum gewünschten Ergebnis.... :-(
Ich habe versucht das ganze mal anders anzugehen und habe zwei Codes gefunden die kombiniert mir schon sehr helfen wüden.
_________________________________________________________
Auswahl einer Textdatei zum Import in ein EXCEL-Sheet:
Private Sub CommandButton1_Click()
Dim fname As Variant
fname = Application.GetOpenFilename("Text-Dateien,*.txt")
If fname <> False Then
With ActiveSheet
Workbooks.Open fname
Worksheets(1).UsedRange.Copy .Range("B10")
ActiveWorkbook.Close False
End With
End If
End Sub
_____________________________________________________
Importieren definierter Textelemente an einen definierten Platz innerhalb eines EXCEL-Sheets:
Private Sub CommandButton1_Click()
Dim Text1 As String
Open "C:\Dokumente und Einstellungen\...\test.txt" 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 + 2
Wend
Close #1
End Sub
_____________________________________________________
Die beiden Codes so kombiniert, dass ich die zu importierende txt-Datei auswählen kann und die einzelnen Textbereiche an einen definierten Platz innerhalb des EXCEL-Sheets imortiere!
Bin gut im Kopieren und Benutzen aber ne Niete was Programmierung angeht! :-(
.....????
Antwort 5 von Marie vom 10.11.2019, 17:07 Options
Sub 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
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 000 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 & "000"
'hier das Verzeichnis der txts einfügen zum Beispiel: StrPath = "F:\temp"
StrPath = ThisWorkbook.Path
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 importierst Du Deine txt.datei
' das kann ich nicht für Dich tun, da ich das Format nicht kenne
' Dann gleich verschieben in anderes Verzeichnis
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 6 von Marie vom 10.11.2019, 17:10 Options
menno, wenn Dir das reicht, dass Du die dateinamen anklickst, dann hättest Du das ja auch gleich sagen können :-(
Mein Code prüft jetzt automatisch deine dämlichen Dateinamen durch bis zu 9 Dateien täglich. Habsch wohl für die Katz gemacht die Verrenkungen????
gruß Marie
Antwort 7 von stoneart vom 10.11.2019, 17:39 Options
...bin geplättet!!!
also wenn ich das zum laufen kriege ist das natürlich das was ich wollte.
Hab nur gedacht, dass ne abgespeckte Variante es auch tun würde....
Vielen, vielen Dank nochmal!!!!
Wie gesagt, muss das ganze nur noch zum laufen bringen... versuche das ausführen des Codes an einen "ButtonClick" zu binden... das sollte ich aber schon noch hinkriegen...?! ;-)
Antwort 8 von Marie vom 10.11.2019, 17:49 Options
Zitat:
Open "C:\Dokumente und Einstellungen\...\test.txt" 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 + 2
Wend
Close #1
Obigen Code musst Du natürlich jetzt einfügen mit der ersten Zeile:
Open txtName For Input As #1
an der stelle wo ich geschrieben habe:
' Hier importierst Du Deine txt.datei
Haste verstanden? Und wenn Du was nicht kapierts, dann sagste genau was!
Gruß Marie
Antwort 9 von stonebeach vom 10.11.2019, 18:06 Options
....Schon kapiert!!!! :-/
Ich Danke dir vielmals! Es funktioniert!
Du kannst dir gar nicht vorstellen wie sehr du mir geholfen hast!!!
Zum Hintergrund:
Dieses Tool möchte ich n ein bestehendes Rechnungs und Lieferscheinprogram einbinden... um:
1. Fehler bei der Übernahme von Daten zu vermeiden
2. Um auch Usern (Kollegen von mir) die noch weniger Ahnung vom Gebrauch eines PC haben als ich, es zu ermöglich per Kopdruck Lieferscheine zu erstellen.
Weitere Detail erspare ich dir hiermit!
Vielen, vielen Dank! nochmals für deinen Support!
Das Wochenende ist gerettet
Antwort 10 von Marie vom 10.11.2019, 18:08 Options
Freut mich. Nun bitte aber das Verschieben in ein anderes Verzeichnis auch gleich automatisieren, kannste das alleine?
Gruß Marie
Antwort 11 von stonebeach vom 10.11.2019, 18:11 Options
.... ähmm...
natürlich nicht!
...wollte dir damit jetz nicht auch noch auf die Nerven gehen!
Aber wenn duch schon fragst...?! ;-)
Antwort 12 von Marie vom 10.11.2019, 18:13 Options
:-) gedulde Dich bissel, nachher schau ich, muss erst was anderes tun.
Gruß Marie
Antwort 13 von Marie vom 10.11.2019, 19:00 Options
Zitat:
Dim strCopypath As String
oben in die Dimanweisung noch einfügen.
Zitat:
strCopypath = "C:\temp\" ' 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
' Hier importierst Du Deine txt.datei
' Dann gleich verschieben in anderes Verzeichnis
FileCopy txtName, strCopypath & strHeute & inti & ".txt"
Kill txtName
End If
Next
Achtung, bitte alles nur an der richtigen Stelle einfügen.
Gruß Marie
Antwort 14 von stoneart vom 10.11.2019, 19:31 Options
KLASSE!!!
So sollte es sein.... eine Auslagerungsdatei im txt Format wird von Externa generiert.
Sie kann sofort eingelesen und ensprechend zu einem Lieferschein und und sogar Rechnung verarbeitet werden und wird dann aus dem aktuellen Ordner in die Ablage verschoben... und das alles mit einem Mausklick!
Bin begeistert!
Jetzt können auch mal die Kollegen ran und ich mal in Urlaub!!!!
:-)
Danke, danke, danke!!!!
LG Martin