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

txt.Datei erzeugen
18.04.2022 15:35:42
Herrmann
Hallo zusammen,
ich möchte gerne, dass wenn ich durch den Button eine txt.Datei erzeuge..
1. die Zahl 3,5 (wie in Spalte AB6) übernommen wird und nicht auf eine 4 aufgerundet wird (wie in der txt.Datei erste Zeile die "000004H")
2. die fortlaufende Nummer immer fortläuft. Heißt, wenn in der txt.Datei in der letzte Zeile die letzte Zahl 14 ist (LPNST000000145077608), dann soll bei der nächsten Erzeugung die Datei mit 15 anfangen, auch bei einem anderen Arbeitsblatt oder nachdem ich Excel vollständig schließe und nach drei Tagen wieder öffne und eine txt.Datei erzeuge.
Beispieldatei: https://www.herber.de/bbs/user/152497.xlsm
Ausgabe: https://www.herber.de/bbs/user/152498.txt
Hat da jemand eine Lösung?
Danke noch mal an UweD, der das Makro soweit entwickelt hat.
Frohe Ostern und danke im Voraus für die Bemühungen.
Gruß

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
niemand..?
19.04.2022 14:17:27
Herrmann
Hallo,
gibt es niemanden der mir hierbei weiterhelfen kann ?
Danke im Voraus
Gruß
Es hört sich wie eine Bestellung...
19.04.2022 15:40:04
Yal
Hallo Herrmann,
Du hast es sicher nicht so gemeint, aber deine "Problembeschreibung" hört sich ein bisschen zu sehr nach einem "ich will, ich will".
Wenn wir dich irgendwo unter die Hand greifen können, wo Du Tipps für nicht gelungene Selbstversuche brauchst, gern.
Ansonsten, da es sich um eine Erledigung, die es schon sehr oft gab, ist das Sexiness der Aufgabe relativ gering. Daher der Mangel an Interesse.
Ich lasse aber offen.
VG
Yal
AW: Es hört sich wie eine Bestellung...
19.04.2022 16:10:44
Herrmann
Hallo Yal,
keines wegs wollte ich respektlos rüber kommen. Ich weiß leider nicht, wie ich das Problem selbst beheben kann. Ich habe da einiges probiert jedoch ohne Erfolg.
Der Thread wurde öfters geöffnet, da ich immer wieder veränderungen feststellen musste.
Auch wenn es uninteressant scheint, würde ich mich dennoch über eine Lösung freuen :)
Danke für den Tipp, fürs nächste mal weiß ich bescheid
Gruß
Anzeige
AW: txt.Datei erzeugen
19.04.2022 15:58:52
GerdL
Hallo Herrmann,
Zu 1.
Du kannst mal >27 auf >28 ändern bis sich Uwe wieder um dich kümmert. Versuch macht kluch.
Gruß Gerd
AW: txt.Datei erzeugen
19.04.2022 16:13:14
Herrmann
Hallo Gerd,
leider konnte er sich nicht bis jetzt melden.
Gruß
AW: txt.Datei erzeugen
19.04.2022 19:03:05
Oberschlumpf
Und was ergab die Änderung von

>27 auf >28
?
AW: txt.Datei erzeugen
19.04.2022 19:33:05
Herrmann
Hallo zusammen,
ich sehe bei der Änderung bei

Case Is >27
auf

Case Is >28
leider nichts oder habe ich was falsch verstanden?
Danke und Gruß
noch offen..
19.04.2022 16:23:29
Herrmann
Gruß Herrmann
AW: noch offen..
20.04.2022 14:59:14
UweD
Hallo Herrmann
Wusste gar nicht, dass ich so vermisst wurde. War mit Ostereier färben zu stark beschäftigt.
zu 1)
Anstellen von

Wert = Wert & Format(Arr08(A), "000000")        '8) Stunde
nimm das hier

LTMP = 6
Lng = Len(Arr08(A))
Leer = WF.Rept("0", LTMP - Lng)
Wert = Wert & Leer & Arr08(A)                   '8) Stunde
Ich hab es nur bei Case 21, 27 eingebaut. Für die anderen Fälle ggf. analog ändern



zu 2)
Leg ein Blatt "Data" an. Das kannst du auch ausblenden
Dort lege ich am Programmende in A1 die letzte Laufnummer ab und lese Sie beim Start erst wieder zurück.
Der komplette Code dazu

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
Dim LastNr As Range
'*** Vorgaben
Pfad = "C:\Users\Herrmann\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
Set LastNr = Sheets("Data").Range("A1") 'Merken der letzten Laufenden Nr
'*** 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
Nr = LastNr.Value
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
LTMP = 6
Lng = Len(Arr08(A))
Leer = WF.Rept("0", LTMP - Lng)
Wert = Wert & Leer & Arr08(A)                   '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 - LastNr & " Datensätze erzeugt."
LastNr = Nr 'Laufnummer merken
End Sub
LG UweD
Anzeige
Miam! Spaghetti-Code! Lecker
20.04.2022 17:50:37
Yal
Moin Herrmann,
jetzt wird es doch -ein bischen- spannend!
Man kann vieles abkürzen oder kompakter machen:

LTMP = 10
TMP = Left(Range("D2"), LTMP)
Lng = Len(TMP)
Leer = WF.Rept(" ", LTMP - Lng)
Wert = Wert & TMP & Leer
Ist gleich wie:

Wert = Wert & Left(Range("D2") & Space(10), 10)
Nicht desto trotz: meine Klugscheisserei ist nichts Wert im Vergleich zu der Arbeit von Uwe (ich setze mich nur in gemachten Nesten).
Aber wenn man es kompakter mag:

Sub TT()
Dim A As Integer
Dim Arr08
Dim Arr14
Dim Arr16
Dim GrDat As Date
Dim i As Long
Dim j As Integer
Dim Nr As Long
Dim Wert As String
Const Pfad = "C:\Users\Herrmann\Desktop\" 'mit \ am Ende
Const Datei = "Ausgabe.txt"
Const Z1 = 6 'beginne ab Zeile
Const Sp1 = 15 'Start ab Spalte O
Const SpNix = 24 ' XYZ auslassen
GrDat = DateSerial(Year(Date), Month(Date) - 1, 1)  'Grenzdatum = 01. des Vormonats
Nr = Sheets("Data").Range("A1").Value
Close #1
Open Pfad & Datei For Output As 1
For i = Z1 To Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
If Cells(i, 2) >= GrDat Then 'nur machen, wenn Datum >= Grenzdatum
For j = Sp1 To Cells.SpecialCells(xlCellTypeLastCell).Column - 2 Step 3  'von Spalte O bis Ende 'Letzte Spalte des gesamten Blattes
If Cells(i, j)  "" And j  SpNix Then 'nur, wenn nicht leer und nicht XYZ
'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 = "RRNST" _
& Format(Nr + 1, "00000000") _
& Left(Range("D2") & Space(10), 10) _
& Format(Cells(i, 2), "DDMMYYYY") _
& Format(Arr08(A), "000000") _
& "H  " _
& Left(Cells(Z1 - 1, j) & Space(6), 6) _
& Left(Arr16(A) & Space(39), 39) _
& Right(Space(14) & "*", 14)
Case 21, 27                                         'bei Aufgabe 3 und 5
Wert = "LENST" _
& Format(Nr + 1, "00000000") _
& Left(Range("D2") & Space(10), 10) _
& Format(Cells(i, 2), "DDMMYYYY") _
& Format(Cells(i, 2), "DDMMYYYY") _
& Right("000000" & Arr08(A), 6) _
& "H  L72   " _
& Left(Cells(Z1 - 1, j) & Space(10), 10) _
& Format(Arr14(A), "000000000000") _
& Left(Arr16(A) & Space(23), 23)
Case Is > 27                                                'ab Aufgabe 6
If IsNumeric(Cells(Z1 - 1, j)) Then
Wert = "RNNST" _
& Format(Nr + 1, "00000000") _
& Left(Range("D2") & Space(10), 10) _
& Format(Cells(i, 2), "DDMMYYYY") _
& Format(Cells(i, 2), "DDMMYYYY") _
& Format(Arr08(A), "000000") _
& "H  APL-XX000004L72   " _
& Left(Cells(Z1 - 1, j) & Space(12), 12) _
& Format(Arr14(A), "0000") _
& Space(4) _
& Left(Arr16(A) & Space(13), 13)
Else
Wert = "LPNST" _
& Format(Nr + 1, "00000000") _
& Left(Range("D2") & Space(10), 10) _
& Format(Cells(i, 2), "DDMMYYYY") _
& Format(Cells(i, 2), "DDMMYYYY") _
& Format(Arr08(A), "000000") _
& "H  L72   " _
& Left(Cells(Z1 - 1, j) & Space(24), 24) _
& Left(Arr16(A) & Space(21), 21) _
End If
End Select
Print #1, Wert
Nr = Nr + 1 'neue Laufnummer
Next A
End If 'Datum
Next j
End If 'leer
Next i
Close #1
MsgBox "Fertig: " & Nr - Sheets("Data").Range("A1").Value & " Datensätze erzeugt."
Sheets("Data").Range("A1") = Nr 'Laufnummer merken
End Sub
Inhaltlich habe ich nicht durchgeschaut. Ich Frage mich z.B., warum Arr08(A) überall mit Format umgewandelt wird, ausser in 21, 27:

Right("000000" & Arr08(A), 6) 
?
VG
Yal
Anzeige
Danke!
20.04.2022 19:34:51
Herrmann
Hallo Yal,
auch dir vielen Dank! funktioniert einwandfrei.
Bleib gesund,
gruß
Herrmann
Vielen Dank!!
20.04.2022 19:31:44
Herrmann
Hallo UweD,
ich hoffe die Ostereier zu färben ist dir gut gelungen!
Ich danke dir noch einmal vielmals für die Überarbeitung. Es funktioniert super und einwandfrei!
Wenn ich mich irgendwie noch Privat bedanken kann würde ich mich freuen.
Bleib gesund,
gruß Herrmann

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige