Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
292to296
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
292to296
292to296
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

txt Dateien mit fester Breite je Spalte export.

txt Dateien mit fester Breite je Spalte export.
15.08.2003 15:29:19
Daniel Bingenheimer
Hallo,
vielleicht kann mir hier ja jemand helfen, denn ich habe in den letzten Tagen, in den ich mit vba rumspiele schon eine Menge Hilfen hier gefunden.
Ich habe eine Excel-Tablle mit mehreren Spalten. Alle Spalten sind als Text formatiert. Jetzt möchte ich diese Excel-Tabelle als txt-Datei exportieren, möchte aber die Daten in eine festzulegende Spaltenbreite schreiben.
Beispiel :
A(6) B(8) C(1) D(3)
1 230603 0009 AB
==> Die txt-Datei sollte dann wie folgt aussehen :
2306030009 AB
Die in Klammern stehende Zahl soll jeweils die Länge der Zelle bestimmen, wenn keine Daten in der Zelle stehen, soll die Zelle mit der entsprechenden Anzahl Leerzeichen aufgefüllt werden.
Das Ergebnis soll also keine Trennzeichen oder Leerzeichen als Trennzeichen enthalten, sondern fortlaufend die Spalten in der entsprechenden Zeichenlänge hintereinander wegschreiben.
Ist so etwas mit vba unter Excel möglich ?
Bisher bin ich immer den umständlichen Weg gegangen, die Daten im csv-Format zu speichern, die Datei ins Access zu importieren und dann aus dem Access in eine txt-Datei zu exportieren mit fester Spaltenbreite.
Für Vorschläge und Ideen danke ich schon mal im voraus.
Mit freundlichen Grüßen
Daniel Bingenheimer
MCP Win2K

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: txt Dateien mit fester Breite je Spalte export.
15.08.2003 16:37:19
ChrisL
Hi Daniel
Kannst du dein Beispiel nochmals genauer erläutern...
A(6) - 230603 OK
B(8) - 0009 soll daraus 00000009 werden? Oder _ _ _ _0009?
C(1) - ?
D(3) - AB ?
Etwa so stelle ich mir die Umsetzung vor...
Option Explicit

Sub speichern()
Dim fName As Variant, iZeile As Long
On Error GoTo ErrorHandler
fName = Workbooks.Application.GetSaveAsFilename("TestfName.txt", "Text (*.txt), *.txt")
If fName = False Then Exit Sub
Application.ScreenUpdating = False
Workbooks.Add
With ThisWorkbook
For iZeile = 1 To .Range("A65536").End(xlUp).Row
' hier fehlt noch was
Next iZeile
End With
ActiveWorkbook.SaveAs FileName:=fName, FileFormat:=xlText, CreateBackup:=False
ActiveWorkbook.Close
ErrorHandler:
Application.ScreenUpdating = True
End Sub

Gruss
Chris

Anzeige
AW: txt Dateien mit fester Breite je Spalte export.
15.08.2003 21:55:00
Daniel Bingenheimer
Hallo,
aus der Spalte B sollte also 0009_ _ _ _ werden, wenn diese 8-stellig ist. Es könnte zum Beispiel sich um ein Feld Hausnummer handeln, welches vierstellig ist, wenn ich dort eine 12 reinschreibe, sollte in der Textdatei dann die 12 gefolgt von zwei _ _ Leerzeichen erscheinen.
Vielen Dank schon mal für den Ansatz.
Gruß
Daniel B

AW: txt Dateien mit fester Breite je Spalte export.
16.08.2003 11:16:23
Jürgen
Hallo Daniel,
nur mal so als Ansatz:
Wenn bekannt ist, dass die Hausnummer immer nur zweistellig ist und das Feld 8 Stellen hat, dann wie folgt (Hausnummer steht in Zelle C2):
strHausnummer = CStr(ActiveSheet.Range("C2")) 'Umwandlung in String
strHausnummer = strHausnummer & String(6, " ") '6 Leerzeichen anhängen
Kann die Hausnummer einstellig oder mehrstellig sein, dann vielleicht eher über eine Schleife gehen:
strHausnummer = CStr(ActiveSheet.Range("C2"))
Do While Len(strHausnummer) < 8
strHausnummer = strHausnummer & " "
Loop
Den String strHausnummer würde ich dann an die Variable strDatensatz anhängen, der sich z.B. schon aus dem Namen, Vornamen, Wohnort u.a. gebildet hat.
strDatensatz = strDatensatz & strHausnummer
Die weiteren Daten mit ihrer Feldlänge würde ich dann ebenfalls anhängen.
Zum Schluß in eine Datei schreiben:
DateiNr = FreeFile 'Variable vorher als Integer deklarieren
Open strDateiname For Output As #DateiNr Len = 512 'Datensatzlänge hier 512 Stellen
Print #DateiNr, strDatensatz
Close
Ist alles ungetestet, aber ungefähr so müßte es gehen.
Gruß
Jürgen

Anzeige
AW: txt Dateien mit fester Breite je Spalte export.
18.08.2003 11:34:58
ChrisL
Hi Daniel
Verstehe zwar immer noch nicht, welche Spalte wieviele Stellen haben soll, aber etwa so...
Option Explicit

Sub speichern()
Dim fName As Variant, iZeile As Long, Inhalt(2) As Variant
On Error GoTo ErrorHandler
fName = Workbooks.Application.GetSaveAsFilename("TestfName.txt", "Text (*.txt), *.txt")
If fName = False Then Exit Sub
Application.ScreenUpdating = False
Workbooks.Add
With ThisWorkbook.Worksheets(1)
For iZeile = 1 To .Range("A65536").End(xlUp).Row
Inhalt(0) = CStr(.Cells(iZeile, 1))
Do While Len(Inhalt(0)) < 6
Inhalt(0) = Inhalt(0) & " "
Loop
Inhalt(1) = CStr(.Cells(iZeile, 2))
Do While Len(Inhalt(1)) < 8
Inhalt(1) = Inhalt(1) & " "
Loop
Inhalt(2) = CStr(.Cells(iZeile, 3))
Do While Len(Inhalt(2)) < 4
Inhalt(2) = Inhalt(2) & " "
Loop
ActiveWorkbook.Worksheets(1).Cells(iZeile, 1) = Inhalt(0) & Inhalt(1) & Inhalt(2)
Next iZeile
End With
ActiveWorkbook.SaveAs FileName:=fName, FileFormat:=xlText, CreateBackup:=False
ActiveWorkbook.Close
ErrorHandler:
Application.ScreenUpdating = True
End Sub

Gruss
Chris

Anzeige
AW: txt Dateien mit fester Breite je Spalte export.
19.08.2003 09:17:36
Andy B.
Hallo Daniel!
So gehts auch! Ist zwar noch etwas verbesserungswürdig und umständlich, aber getestet und lauffähig!

Sub Textdatei_erstellen()
Dim strBasis As String
Dim strDaten As String
Dim intAnzahl As Integer
Dim i As Integer
Dim j As Integer
Dim fso As Object
Dim txt As Object
Dim c As Range
Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Select
intAnzahl = Selection.Cells.Count - 1
Sheets.Add
Worksheets(1).Activate
For i = 1 To intAnzahl Step 1
j = i - 1
Range("A1").Select
ActiveCell.Offset(j, 0).Select
ActiveCell.FormulaR1C1 = "=CONCATENATE('VQ-VKUNNR'!R[1]C,""  "")"
ActiveCell.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
strBasis = ActiveCell.Value
strDaten = Left(strBasis, 2)
ActiveCell.Value = strDaten
Next i
Range("A1").Select
Set fso = CreateObject("scripting.filesystemobject")
Set txt = fso.createtextfile("s:\msoffice\excel\test\test.txt", True)
For Each c In Range("A:A")
If c.Value <> "" Then
txt.writeline c & c.Offset(0, 1).Value & c.Offset(0, 2).Value & _
c.Offset(0, 3).Value & c.Offset(0, 4).Value & c.Offset(0, 5).Value & _
c.Offset(0, 6).Value & c.Offset(0, 7).Value & c.Offset(0, 8).Value & _
c.Offset(0, 9).Value & c.Offset(0, 10).Value & c.Offset(0, 11).Value & _
c.Offset(0, 12).Value & c.Offset(0, 13).Value & c.Offset(0, 14).Value & _
c.Offset(0, 15).Value & c.Offset(0, 16).Value & c.Offset(0, 17).Value & _
c.Offset(0, 18).Value & c.Offset(0, 19).Value
Else
Exit Sub
End If
Next c
Set fso = Nothing
Set txt = Nothing
End Sub

Den Passus mit der Formel müßte man für jede Spalte anpassen. Wenn Du willst, schicke ich Dir die fertige Datei gern per Mail.
Viel Spaß noch und Haltung annehmen.
Gruß
Andy aus DD

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige