Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1876to1880
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

txt.Datei erzeugen (altes Thread)

txt.Datei erzeugen (altes Thread)
21.03.2022 13:38:58
Herrmann
Hallo zusammen,
ich möchte (wieder) ein altes Thread öffnen, um eine txt.-Datei erstellen zu können, welches in ein anderes Tool eingelesen wird. Dank UweD konnte ich mit seinem Makro arbeiten, jedoch steht ein Update bevor und ich muss das Makro nun dementsprechend anpassen.
alte Thread: 1. https://www.herber.de/forum/cgi-bin/callthread.pl?index=1873378
2. https://www.herber.de/forum/cgi-bin/callthread.pl?index=1874277
Die erzeugte txt.-Datei hat eine bestimmte (ich nenn es mal) "Formatierung". Zunächst war es nur eine Formatierung, die sich auf vier erweitern wird (leider und für mich persönlich sehr nervig...)
Ich habe versucht UweD's Makro umzuformen, jedoch hatte ich Schwierigkeiten die verschiedenen Formatierungsarten in eins zu kombinieren.
Die Excel-Beispieldatei: https://www.herber.de/bbs/user/151934.xlsm
(Der Button funktioniert zwar, basiert aber nur auf die eine Formatierung)
Die txt.-Beispieldatei: https://www.herber.de/bbs/user/151935.txt
(Genau diese txt.Datei soll das neue Makro erzeugen können)
Die Formatierung soll sich auf die Kennnummer beziehen (s. O5, U5, AD5 und AG5)
Aufgabe 1 bis 5 sind immer fix positioniert und bleiben unverändert.
Aufgabe 1 und 2 haben die gleiche Formatierung (6661 und 6662).
Die erzeuge Ausgabe soll also wie in der txt.-Beispieldatei lauten:
RRNST000000065077608 21022022000002H 6661 Homeoffice * *
Von UweD und mein angepasstes Makro:
Sub TT()
...
Wert = "RR" '1) fix
Wert = Wert & "N" '2) fix
Wert = Wert & "ST" '3) fix
Wert = Wert & Format(Nr + 1, "00000000") '4) laufende Nummer
'---
LTMP = 10
TMP = Left(Range("D2"), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer '5) Personalnummer plus Leerzeichen Max 10
'---
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY") '6) Datum
Wert = Wert & Format(Arr08(A), "000000") '8) Stunde
Wert = Wert & "H " '9) fix plus Leerzeichen
'---
LTMP = 6
TMP = Left(Cells(Z1 - 1, j), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer '13) Aufgabe +Leerzeichen Max 6 Zeichen
'---
LTMP = 39
TMP = Left(Arr16(A), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng) & "*"
Wert = Wert & TMP & Leer '16) Kommentar immer 39 +*
'---
Wert = Wert & " *" '17) fix immer 14 Zeichen
Print #1, Wert
Nr = Nr + 1 'neue Laufnummer
Aufgabe 3 und 5 haben die gleiche Formatierung (1111 und 1112).
Die erzeuge Ausgabe soll also wie in der txt.-Beispieldatei lauten:
LENST000000025077608 2002202220022022000004H L72 1112 000000000022Pflege *
Von UweD und mein angepasstes Makro:
Sub TT()
...
Wert = "LE" '1) fix
Wert = Wert & "N" '2) fix
Wert = Wert & "ST" '3) fix
Wert = Wert & Format(Nr + 1, "00000000") '4) laufende Nummer
'---
LTMP = 10
TMP = Left(Range("D2"), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer '5) Personalnummer plus Leerzeichen Max 10
'---
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY") '6) Datum
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY") '7) Datum2
Wert = Wert & Format(Arr08(A), "000000") '8) Stunde
Wert = Wert & "H " '9) fix plus Leerzeichen
Wert = Wert & "L72 " '12) fix plus Leerzeichen
'---
LTMP = 10
TMP = Left(Cells(Z1 - 1, j), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer '13) Aufgabe +Leerzeichen Max 10 Zeichen
'---
Hier weiß ich leider nicht, wie ich die "000000000022" erzeuge. Das Feld soll 12 Zeichen betragen mit führenden Nullen. Also wenn wir wie bei der Excel-Beispieldatei 0022 eingetragen haben soll es davor automatisch soviele führende Nullen erzeugen, bis wir auf 12 Zeichen kommen. In dem fall wären es 8 Nullen.
'---
LTMP = 23
TMP = Left(Arr16(A), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng) & "*"
Wert = Wert & TMP & Leer '16) Kommentar immer 23 +*
'---
Print #1, Wert
Nr = Nr + 1 'neue Laufnummer
Aufgabe 3 soll ignoriert werden. Das ist im Makro in der Excel-Beispieldatei eingebaut.
Ab Aufgabe 6 ist entweder die Formatierung die UweD erstellt hat, indem Fall die Aufgabe 7 mit der Kennnummer 65879644862:
RNNST000000095077608 2102202221022022000002H APL-XX000004L72 65879644862 0055 Kundenabnahme*
oder..
bei Aufgaben die eine Kennnummer mit R. oder L., jegliche Art von Buchstabe-Punkt, soll die Formatierung wie folgt lauten:
LPNST000000045077608 2002202220022022000008H L72 R.2019-AK-CH-00 diverse *
Hier habe ich das Makro ebenfalls angepasst:
Sub TT()
..
Wert = "LP" '1) fix
Wert = Wert & "N" '2) fix
Wert = Wert & "ST" '3) fix
Wert = Wert & Format(Nr + 1, "00000000") '4) laufende Nummer
'---
LTMP = 10
TMP = Left(Range("D2"), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer '5) Personalnummer plus Leerzeichen Max 10
'---
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY") '6) Datum
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY") '7) Datum2
Wert = Wert & Format(Arr08(A), "000000") '8) Stunde
Wert = Wert & "H " '9) fix plus Leerzeichen
Wert = Wert & "L72 " '12) fix plus Leerzeichen
'---
LTMP = 24
TMP = Left(Cells(Z1 - 1, j), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer '13) Aufgabe +Leerzeichen Max 24 Zeichen
'---
LTMP = 21
TMP = Left(Arr16(A), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng) & "*"
Wert = Wert & TMP & Leer '16) Kommentar immer 21 +*
'---
Print #1, Wert
Nr = Nr + 1 'neue Laufnummer
Also besteht die Herausforderung (für mich) darin, diese Makros zu kombinieren, so dass es je nach Kennnummer in der Zeile 5 die Formatierung als txt.-Datei erzeugt.
Bitte beachtet, dass ich bei den angepassten Makros die Vorgaben weg gelassen habe, damit es hier nicht ein längerer Text, als es schon ist, wird. :)
Ich hoffe auf eure Unterstützung und bedanke mich im Voraus für eure Bemühungen. Ich hoffe ich konnte mein Problem verständlich erklären (bitte dafür auch Thread 1 und 2 beachten)
LG

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
UweD wieder ..
21.03.2022 18:08:30
Herrmann
.. könntest du bitte wieder eingereifen, da du mit dem Thema vertraut bist und deine Lösungsansätze mehr als zufriedenstellend sind.
Ich bin natürlich auf für jeden anderen Helfer dankbar
Gruß und danke im Voraus
AW: UweD wieder ..
22.03.2022 11:33:13
UweD
Hallo Herrmann
- oben unterscheidest du nach: Aufgabe 1; 2 und Aufgabe 3;5 (also wenn Spalte O:Q bzw R:T oder im anderen Fall U:W bzw. AA:AC)
sollen anders behandelt werden
- unten schreibst du: so dass es je nach Kennnummer in der Zeile 5...
Wie denn nun? Abhängig von der Spalte
oder vom Inhalt in Zeile 5 ? (bei 6661 / 6662 so; wenn 1111 oder 1112 dann anders)
LG UweD
Anzeige
AW: UweD wieder ..
22.03.2022 12:14:24
Herrmann
Hallo Uwe,
danke für die Rückmeldung.
Ich meine, dass es Abhängig vom Inhalt in der Zeile 5 erzeugen soll.
Zur Vereinfachung habe ich mir nur gedacht, da die Aufgabe 1 und 2 immer fix auf Spalte O:Q bzw R:T bleibt und nur dort auftaucht, könnte man ja diese eine Formatierung auf die Spalten ansprechen.
Aufgabe 3 und 5 sind immer fix auf der Spalte U:W bzw. AA:AC, demnach kann man auch hier die "andere Formatierung" auf die Spalten fixieren.
Aufgabe 4 bzw Spalte X:Z wird ignoriert, wie wir es schon hatten.
Ab Spalte AD unterscheidet es sich immer ob in der Zeile 5: Buchstabe-Punkt (also R.2019.../ L.2022..) steht oder eine reine Zahlenreihe (wie Aufgabe 7 65879644862) steht.
Ich hoffe so ist es nun verständlicher. Vielen Dank für deine Bemühung!
Gruß
Anzeige
AW: UweD wieder ..
22.03.2022 14:51:52
UweD
Hallo
so?
- bei den 4 Möglichkeiten ist zwar einiges gleich, aber so ist die Lesbarkeit/ Änderbarkeit aber einfacher
- Musste bei 9) und 12) noch Leerzeichen ergänzen um auf dein Muster zu kommen

Sub TT()
Dim Pfad As String, Datei As String, Z1 As Integer, LR As Long
Dim Wert As String, i As Long, j As Integer, Nr As Long
Dim Sp1 As Integer, Anz As Integer, WF, Lng As Integer, Leer As String
Dim Arr08, Arr14, Arr16, A As Integer, TMP As String, LTMP As Integer
Dim GrDat As Date, SpNix As Integer, LC As Integer
'*** Vorgaben
Pfad = "E:\Users\Hermann\Desktop\" 'mit \ am Ende
'Pfad = "E:\Excel\Temp\" 'mit \ am Ende
Datei = "Ausgabe.txt"
Z1 = 6 'beginne ab Zeile
Sp1 = 15 'Start ab Spalte O
SpNix = 24 ' XYZ auslassen
'*** Ende Vorgaben
Set WF = WorksheetFunction
LR = Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
LC = Cells.SpecialCells(xlCellTypeLastCell).Column 'Letzte Spalte des gesamten Blattes
GrDat = DateSerial(Year(Date), Month(Date) - 1, 1)  'Grenzdatum = 01. des Vormonats
Close #1
Open Pfad & Datei For Output As 1
For i = Z1 To LR
For j = Sp1 To LC - 2 Step 3 'von Spalte O bis Ende
If Cells(i, j)  "" And j  SpNix Then 'nur, wenn nicht leer und nicht XYZ
'Grenzdatum prüfen
If Cells(i, 2) >= GrDat Then
'Mehrere Zeilen in einer Zelle?
Arr08 = Split(Cells(i, j + 1), vbLf)                'AF Typ
Arr14 = Split(Cells(i, j), vbLf)                    'Std
Arr16 = Split(Cells(i, j + 2), vbLf)                'Kommentar
For A = 0 To UBound(Arr08) 'Wiederholung wenn mehrere Zeilen in Zelle
Select Case j
Case 15, 18                                         'bei Aufgabe 1 und 2
Wert = "RR"                                     '1) fix
Wert = Wert & "N"                               '2) fix
Wert = Wert & "ST"                              '3) fix
Wert = Wert & Format(Nr + 1, "00000000")        '4) laufende Nummer
LTMP = 10
TMP = Left(Range("D2"), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer                        '5) Personalnummer plus Leerzeichen Max 10
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY")   '6) Datum  (7 entfällt)
Wert = Wert & Format(Arr08(A), "000000")        '8) Stunde
Wert = Wert & "H  "                             '9) fix plus Leerzeichen
'---                                            '(10, 11, 12 entfällt)
LTMP = 6
TMP = Left(Cells(Z1 - 1, j), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer                        '13) Aufgabe +Leerzeichen Max 6 Zeichen
'---                                            '(14, 15 entfällt)
LTMP = 39
TMP = Left(Arr16(A), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng) & "*"
Wert = Wert & TMP & Leer                        '16) Kommentar immer 39
Wert = Wert & WF.Rept(" ", 13) & "*"            '17) fix zusätzliches * immer 14 Zeichen
Case 21, 27                                         'bei Aufgabe 3 und 5
Wert = "LE"                                     '1) fix
Wert = Wert & "N"                               '2) fix
Wert = Wert & "ST"                              '3) fix
Wert = Wert & Format(Nr + 1, "00000000")        '4) laufende Nummer
LTMP = 10
TMP = Left(Range("D2"), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer                        '5) Personalnummer plus Leerzeichen Max 10
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY")   '6) Datum
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY")   '7) Datum2
Wert = Wert & Format(Arr08(A), "000000")        '8) Stunde
Wert = Wert & "H  "                             '9) fix plus Leerzeichen
'---                                            '(10, 11 entfällt)
Wert = Wert & "L72   "                          '12) fix plus Leerzeichen
LTMP = 10
TMP = Left(Cells(Z1 - 1, j), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer                        '13) Aufgabe +Leerzeichen Max 10 Zeichen
Wert = Wert & Format(Arr14(A), "000000000000")  '14) Aufgabentyp 12 stellig
'---                                            '(15 entfällt)
LTMP = 23
TMP = Left(Arr16(A), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng) & "*"
Wert = Wert & TMP & Leer                        '16) Kommentar immer 23 +*
Case Is > 27                                                'ab Aufgabe 6
Select Case IsNumeric(Cells(Z1 - 1, j))
Case True                                           'Nur Ziffern
Wert = "RN"                                     '1) fix
Wert = Wert & "N"                               '2) fix
Wert = Wert & "ST"                              '3) fix
Wert = Wert & Format(Nr + 1, "00000000")        '4) laufende Nummer
LTMP = 10
TMP = Left(Range("D2"), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer                        '5) Personalnummer plus Leerzeichen Max 10
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY")   '6) Datum
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY")   '7) Datum2
Wert = Wert & Format(Arr08(A), "000000")        '8) Stunde
Wert = Wert & "H  "                             '9) fix plus Leerzeichen
Wert = Wert & "APL-XX00"                        '10) fix
Wert = Wert & "0004"                            '11) fix
Wert = Wert & "L72   "                          '12) fix plus Leerzeichen
LTMP = 12
TMP = Left(Cells(Z1 - 1, j), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer                        '13) Aufgabe +Leerzeichen Max 12 Zeichen
Wert = Wert & Format(Arr14(A), "0000")          '14) Aufgabentyp
Wert = Wert & "    "                            '15) fix 4 Leerzeichen
LTMP = 13
TMP = Left(Arr16(A), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng) & "*"
Wert = Wert & TMP & Leer                        '16) Kommentar immer 13 +*
Case False                                          'mit Buchstaben
Wert = "LP"                                     '1) fix
Wert = Wert & "N"                               '2) fix
Wert = Wert & "ST"                              '3) fix
Wert = Wert & Format(Nr + 1, "00000000")        '4) laufende Nummer
LTMP = 10
TMP = Left(Range("D2"), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer                        '5) Personalnummer plus Leerzeichen Max 10
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY")   '6) Datum
Wert = Wert & Format(Cells(i, 2), "DDMMYYYY")   '7) Datum2
Wert = Wert & Format(Arr08(A), "000000")        '8) Stunde
Wert = Wert & "H  "                             '9) fix plus Leerzeichen (10, 11 entfällt)
Wert = Wert & "L72   "                          '12) fix plus Leerzeichen
LTMP = 24
TMP = Left(Cells(Z1 - 1, j), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer                        '13) Aufgabe +Leerzeichen Max 24 Zeichen
'---                                            '(14, 15 entfällt)
LTMP = 21
TMP = Left(Arr16(A), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng) & "*"
Wert = Wert & TMP & Leer                        '16) Kommentar immer 21 +*
End Select
End Select
Print #1, Wert
Nr = Nr + 1 'neue Laufnummer
Next A
End If 'Datum
End If 'leer
Next j
Next i
Close #1
MsgBox "Fertig: " & Nr & " Datensätze erzeugt."
End Sub
LG UweD
Anzeige
Wahnsinn.. Danke!
22.03.2022 17:06:54
Herrmann
Hallo Uwe,
es funktioniert perfekt. Ich kann dir garnicht genug danken, vielen vielen Dank! Du bist der Hammer :)
LG
Prima. Danke für die Rückmeldung. owT
22.03.2022 17:38:00
UweD

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige