Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Export in Textdatei, wie bekomme ich bei fester Spaltenbreite den Text linksbündig?





Frage

Hallo ihr Lieben! ich sitze fast den ganzen Tag an folgendem Code um den Text in der Ausgabe linksbündig zu bekommen. Auch möchte ich die Anführungszeichen am Anfang und Ende einer Zeile entfernen. Aber letzteres könnte ich mit suchen und ersetzen lösen. In diesem VBA-Code wird eine Tabelle in eine Textdatei ausgegeben mit festen Spaltenbreiten. Könnt ihr mir helfen? Wo liegt der Fehler? internette grüsse ponscho [code]Option Explicit Sub speichern_als_textdatei() Dim i As Long, n As Long Dim colCount As Integer, rowCount As Integer Dim f1L As Integer, f2L As Integer, f3L As Integer, f4L As Integer Dim myExportFile As String, exportStr As String, tmpStr As String Dim myStart As Date, myEnd As Date myExportFile = "D:\Demo.txt" Close #1 Open myExportFile For Output As #1 'Schleifenbegrenzungen definieren 'Anzahl Zeilen rowCount = Cells(Rows.Count, 4).End(xlUp).Row 'Anzahl Spalten zum exportieren colCount = 4 'Länge der jeweiligen Datenfelder in Anzahl Zeichen 'Wie sie in der Exportdatei stehen sollen f1L = 8 f2L = 8 f3L = 31 f4L = 60 exportStr = "" 'Zeitkontrolle myStart = Now Debug.Print myStart 'Feld-Überschriften exportieren 'hier Zeile 1 For i = 1 To colCount exportStr = exportStr & "" & Cells(1, i) & "" Next i Write #1, exportStr 'Zeilenschleife 'beginnt ab Zeile 3 For i = 3 To rowCount exportStr = "" 'Spaltenschleife tmpStr = "" 'Für Feld1 z.B. mit Leerzeichen auffüllen For n = 1 To f1L - Len(Cells(i, 1)) tmpStr = tmpStr & " " Next n exportStr = exportStr & "" & tmpStr & Cells(i, 1).Text tmpStr = "" 'Für Feld 2 z.B. mit Underline auffüllen For n = 1 To f2L - Len(Cells(i, 2)) tmpStr = tmpStr & " " Next n exportStr = exportStr & "" & tmpStr & Cells(i, 2) tmpStr = "" 'Für Feld 3 z.B. mit 0 (Null) auffüllen For n = 1 To f3L - Len(Cells(i, 3)) tmpStr = tmpStr & " " Next n exportStr = exportStr & "" & tmpStr & Cells(i, 3) tmpStr = "" 'Für Feld 2 z.B. mit Underline auffüllen For n = 1 To f4L - Len(Cells(i, 4)) tmpStr = tmpStr & " " Next n exportStr = exportStr & "" & tmpStr & Cells(i, 4) tmpStr = "" 'Schreiben in die Datei Write #1, exportStr & "" Next i Close #1 Debug.Print Now Debug.Print Format(Now - myStart, "hh:mm:ss") MsgBox "erfolgreich gespeichert!" End Sub[/code]

Antwort 1 von Flupo

Warum so aufwändig?
Probier mal
Zitat:
ActiveWorkbook.SaveAs Filename:="dateiname.txt", _
FileFormat:=xlTextMSDOS, CreateBackup:=False


Gruß Flupo

Antwort 2 von ponscho

guten morgen Flupo und an alle,

schon wach?

ich möchte mich nicht mit fremden lorbeeren schmücken, diesen code habe ich über googeln gefunden.
ich habe ledeglich ein paar sachen meinen bedürfnissen durch rumprobieren angepasst.
mein wissen an vba ist sehr beschränkt.

wenn ich den teil
 ActiveWorkbook.SaveAs Filename:="dateiname.txt", _
FileFormat:=xlTextMSDOS, CreateBackup:=False

richtig deute, dann soll er mit diesem code das ganze tabellenblatt in eine texdatei exportieren? oder missverstehe ich das? und wo kommt dieser teil hin?

wenn dem so ist, soll er das nicht. er soll nur bestimmte spalten und zeilen in eine textdatei umwandeln.
am liebsten wäre es mir natürlich, wenn er mich vorher fragen würde welchen bereich ich als textdatei möchte, das aber wäre zuviel des guten.

auch ist das problem mit linksbündig nicht gelöst, oder doch?

internette grüsse
ponscho

Antwort 3 von KJG17

Moin,

das Problem könnte u.U. hier liegen:
Zitat:
Dim f1L As Integer, f2L As Integer, f3L As Integer, f4L As Integer

Variablen deklariert man mit Hilfe der Dim Anweisung, der Angabe des Bezeichners und des Datentyps:

Dim Text As String (Zeichenkette, linksbündig)
Dim Wert As Integer (Ganzzahl, rechtsbündig)

Gruß
Kalle

Antwort 4 von ponscho

auch dir einen guten morgen kalle,

muss ich dann dieses

Zitat:
Dim f1L As Integer, f2L As Integer, f3L As Integer, f4L As Integer

in

Dim f1R As Integer, f2R As Integer, f3R As Integer, f4R As Integer

also in R für rechts ändern?

ich weiss, fragen eines dummen anfängers ;o)

und wo kommt dieser abschnitt hin

Zitat:
Dim Text As String (Zeichenkette, linksbündig)
Dim Wert As Integer (Ganzzahl, rechtsbündig)

und wie müsste er richtig aussehen?

internette grüsse
ponscho

Antwort 5 von Flupo

Zitat:
dann soll er mit diesem code das ganze tabellenblatt in eine texdatei exportieren? oder missverstehe ich das?


Genauso isses.
Wenn's nicht passt, brauchen wir hierüber nicht weiter schwafeln.

Was KJG17 vorschlägt, ist aus den Zahlenvariablen Zeichenketten zu machen.

Aus
Dim f1L As Integer, f2L As Integer, f3L As Integer, f4L As Integer

würde dann
Dim f1L As String, f2L As String, f3L As String, f4L As String

Das ist aber auch keine Lösung für das Problem da hier nur die Längen der einzelnen Spalten in der Exportdatei definiert werden.

M.E. liegt die Ursache für das Problem in diesen Zeilen:
    exportStr = exportStr & "" & tmpStr & Cells(i, 1).Text

In der Variablen exportstr werden die einzelnen Zellen einer Zeile gesammelt.
Schema: Füllzeichen(Variable tmpStr) + Zellinhalt
Die Füllzeichen werden also immer vor dem Zellinhalt eingefügt.
Wenn du die Reihenfolge in
exportStr = exportStr & "" & Cells(i, 1).Text& tmpStr 

änderst, werden die Füllzeichen hinter dem Zellinhalt eingefügt.

Die Schleife
    For i = 1 To colCount
        exportStr = exportStr & "" & Cells(1, i) & ""
    Next i

Ist völlig überflüssig und kann entfallen.

Gruß Flupo

Antwort 6 von ponscho

astrein, ihr seid einfach klasse !!!

habe es so geändert
exportStr = exportStr & "" & Cells(i, 1).Text& tmpStr

nur bei "Text&" habe ich ein leerzeichen zwischen "Text" und "&" eingefügt sonst hätte es nicht funktioniert.

nur noch eine abschliessende frage:
wie definiere ich in diesem abschnitt für die überschrift
'Feld-Überschriften exportieren
    'hier Zeile 1
    For i = 1 To colCount
        exportStr = exportStr & "" & Cells(1, i) & ""
    Next i
    Write #1, exportStr

welche zellen er mir übertragen soll?

hätte gerne die zellen A1:C1 als überschrift...

internette grüsse
ponscho

Antwort 7 von Flupo

Zitat:
nur bei "Text&" habe ich ein leerzeichen zwischen "Text" und "&" eingefügt sonst hätte es nicht funktioniert.


Das Leerzeichen ist dem drag&drop hier im Supportnet zum Opfer gefallen. ;-)

Das mit den Feld-Überschriften sollte so schon (fast) richtig sein. Es fehlen nur wieder die Füllzeichen pro Spalte.
Meine Bemerkung oben rührt daher, dass ich in diesen Zellen nichts drin habe.
So wie der Code jetzt aufgebaut ist, schreibt er die Inhalte der Zellen A1 bis D1 (colCount=4) ohne irgendwelche Trennzeichen in die erste Zeile.

Mit Füllzeichenberücksichtigung sieht das Ganze dann so aus:
    'Feld-Überschriften exportieren
    'hier Zeile 1
    For i = 1 To colCount
        Select Case i
        Case 1, 2
            x = 8
        Case 3
            x = 31
        Case 4
            x = 60
        End Select
        For n = 1 To x - Len(Cells(1, i))
            tmpStr = tmpStr & " "
        Next n
        exportStr = exportStr &  Cells(1, i).Text  & tmpStr
    Next i
    Write #1, exportStr

Nicht vergessen die neue Variable x oben als Integer zu deklarieren.
Die Deklaration kannst du übrigend noch etwas vereinfachen:
    Dim i, n As Long
    Dim colCount, rowCount, f1L, f2L, f3L, f4L, x As Integer
    Dim myExportFile, exportStr, tmpStr As String
    Dim myStart, myEnd As Date


Gruß Flupo

Antwort 8 von ponscho

superklasse !!!

jetzt funktioniert es so wie ich es möchte.

vielen, vielen dank!

ich hoffe mir geht das VBA schreiben auch mal so von der hand.

internette grüsse
ponscho

Antwort 9 von Flupo

Kleiner Tipp noch: Ich habe mir ein bisschen VBA angeeignet, indem ich die gewünschten Aktionen aufgezeichnet (geht in deinem Fall natürlich eher schlecht) und dann den Code analysiert habe.
So treten jede Menge Fragen auf, die zumeist mit der (leider standardmäßig nicht installierten) VBA-Onlinehilfe zu klären waren.

Ich fand die Onlinehilfe übrigend bis Office97 deutlich besser und aussagekräftiger. Auf Arbeit haben wir jetzt OfficeXP und zuhause 2003. Das gefällt mir nicht mehr so gut.

Gruß Flupo

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


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: