Microsoft Excel

Herbers Excel/VBA-Archiv

Aus Excel TXT-Datei erstellen VBA

Betrifft: Aus Excel TXT-Datei erstellen VBA von: Wesdi
Geschrieben am: 31.08.2020 13:52:50

Hallo zusammen,


ich möchte aus einer Excel-Tabelle eine TXT-Datei erzeugen die das Leerzeichen als Trennzeichen benutzt.


Um dies mittels eines kleinen Makros zu erzeugen, habe ich reichlich VBA-Skripte gefunden, die auch entsprechend funktionieren.

Jetzt kommt aber mein Problem!!!


Diese TXT-Datei soll als Schnittstellendatei fungieren und die einzelnen Spalten sollen unterschiedlich große Feldlängen haben. Hieran scheitere ich kläglich und finde auch im WWW keine passendes Beispiel, welches ich eventuell für meine Zwecke umbauen könnte


Beispiel:


Spalte1 = Feldlänge 3

Spalte2 = Feldlänge 10

Spalte3 = Feldlange 50

Spalte4 = Feldlänge 8

usw.


Eigentlich kein Hexenwerk...aber ich scheitere bei den vordefinierten Feldlangen.


Ein Beispiel der Ergebnisdatei habe ich hochgeladen.


https://www.herber.de/bbs/user/139946.txt

Betrifft: AW: Aus Excel TXT-Datei erstellen VBA
von: peterk
Geschrieben am: 31.08.2020 14:08:11

Hallo

z.B.
Zeile = ""
Zeile = Zeile & space(3-len(Cells(1,1).value)) & Cells(1,1).value
Zeile = Zeile & space(10-len(Cells(1,2).value)) & Cells(1,2).value
Zeile = Zeile & space(50-len(Cells(1,3).value)) & Cells(1,3).value

Betrifft: AW: Aus Excel TXT-Datei erstellen VBA
von: Nepumuk
Geschrieben am: 31.08.2020 14:08:20

Hallo Wesdi,

ein Beispiel:

Option Explicit

Public Sub Beispiel()
    
    Dim intFielenumber As Integer
    Dim strSpalte1 As String * 3, strSpalte2 As String * 10
    Dim strSpalte3 As String * 50, strSpalte4 As String * 8
    
    strSpalte1 = "AAA"
    strSpalte2 = "BBB"
    strSpalte3 = "CCC"
    strSpalte4 = "DDD"
    
    Reset
    
    intFielenumber = FreeFile
    
    Open "G:\Ausgabe.txt" For Output As #intFielenumber
    
    Print #intFielenumber, strSpalte1 & strSpalte2 & strSpalte3 & strSpalte4
    
    Close #intFielenumber
    
End Sub

Gruß
Nepumuk

Betrifft: AW: Aus Excel TXT-Datei erstellen VBA
von: Rudi Maintaire
Geschrieben am: 31.08.2020 14:17:36

noch'n Gedicht:
Sub aaa()
  Dim arrColumns
  Dim lngRow As Long, lngColumn As Long
  Dim l As Integer
  Dim arrOut(0 To 3), strOut As String
  arrColumns = Array(3, 10, 50, 8)
  Open "c:\temp\Test.txt" For Output As #1
  For lngRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    For lngColumn = 0 To 3
      l = arrColumns(lngColumn)
      arrOut(lngColumn) = Left(Cells(lngRow, lngColumn + 1) & Space(l), l)
    Next
    strOut = Join(arrOut, " ")
    Print #1, strOut
  Next lngRow
  Close #1
End Sub

Gruß
Rudi

Betrifft: AW: Aus Excel TXT-Datei erstellen VBA
von: Wesdi
Geschrieben am: 31.08.2020 14:26:54

Hey Ihr seid der Wahnsinn!!!

So schnell geantwortet und so viele gute Ideen!!!

Dafür vielen Dank!!

Wesdi

Betrifft: AW: Aus Excel TXT-Datei erstellen VBA
von: Wesdi
Geschrieben am: 03.09.2020 16:07:09

Hallo nochmal an Alle,

eure Antworten haben mir schon den richtigen Weg gezeigt, aber wenn ich die erstellte Datei jetzt in die Schnittstelle einspielen will, funktioniert es trotzdem nicht, er möchte das alles rechtsbündig haben.

Wie bekomme ich denn jetzt die Ausgabedatei so hin das alles rechtsbündig erzeugt wird???

Ich vermute auch hier für einen VBA-Fachmann eine Kleinigkeit, aber für mich....

Vielen Dank im voraus.

Wesdi

Betrifft: AW: Aus Excel TXT-Datei erstellen VBA
von: Nepumuk
Geschrieben am: 03.09.2020 16:45:08

Hallo Wesdi,

teste mal:

Option Explicit

Public Sub Beispiel()
    
    Dim intFielenumber As Integer
    Dim strSpalte1 As String * 3, strSpalte2 As String * 10
    Dim strSpalte3 As String * 50, strSpalte4 As String * 8
    
    strSpalte1 = Space$(Len(strSpalte1) - Len(Cells(1, 1).Text)) & Cells(1, 1).Text
    strSpalte2 = Space$(Len(strSpalte2) - Len(Cells(1, 2).Text)) & Cells(1, 2).Text
    strSpalte3 = Space$(Len(strSpalte3) - Len(Cells(1, 3).Text)) & Cells(1, 3).Text
    strSpalte4 = Space$(Len(strSpalte4) - Len(Cells(1, 4).Text)) & Cells(1, 4).Text
    
    Reset
    
    intFielenumber = FreeFile
    
    Open "G:\Ausgabe.txt" For Output As #intFielenumber
    
    Print #intFielenumber, strSpalte1 & strSpalte2 & strSpalte3 & strSpalte4
    
    Close #intFielenumber
    
End Sub

Gruß
Nepumuk

Betrifft: AW: Aus Excel TXT-Datei erstellen VBA
von: Wesdi
Geschrieben am: 04.09.2020 13:46:53

Hallo Nepumuk,

das funktioniert super, die Abstände stimmen und wird erkannt.

Aber wie kriege ich es jetzt noch hin, daß er auch mehrere Zeilen ausliest.

Ich habe da unterschiedliche Dateien, mit unterschiedlich vielen Einträgen (mal 5, aber auch mal 1000).

Das kann ich ja nicht einzeln dareinpacken. Kann ich hier einen Zähler hinkriegen der schaut in wievielen Zeilen Daten stehen und dann alle diese Zeilen ausliest und auch schreibt?

Sorry ich bin da echt nicht fit in solchen Sachen.

Ich hatte mich für die Variante on Rudi Maintaire entschieden die alle Zeilen ausliest, aber nicht rechtsbündig.

Ich habe versucht aus den Informationen beider Makros mir eins zu bauen, gelingt mir aber nicht!!!???

Hier nochmal das von Rudi:
Sub aaa()
  Dim arrColumns
  Dim lngRow As Long, lngColumn As Long
  Dim l As Integer
  Dim arrOut(0 To 3), strOut As String
  arrColumns = Array(3, 10, 50, 8)
  Open "c:\temp\Test.txt" For Output As #1
  For lngRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    For lngColumn = 0 To 3
      l = arrColumns(lngColumn)
      arrOut(lngColumn) = Left(Cells(lngRow, lngColumn + 1) & Space(l), l)
    Next
    strOut = Join(arrOut, " ")
    Print #1, strOut
  Next lngRow
  Close #1
End 
Sub 

Er benutzt hier IngRow als Zähler, aber die Kombi aus beiden Makros gelingt mir gar nicht.

Vielen Dank im voraus

VG

Wesdi


Betrifft: AW: Aus Excel TXT-Datei erstellen VBA
von: peterk
Geschrieben am: 04.09.2020 13:58:25

Hallo

Für Rechtsbndig:

arrOut(lngColumn) = Right(Space(l) & Cells(lngRow, lngColumn + 1), l)

Peter

Betrifft: AW: Aus Excel TXT-Datei erstellen VBA
von: Wesdi
Geschrieben am: 04.09.2020 14:58:23

Hallo Peter,

vielen Dank, das war es...sieht gut aus und die Schnittstelle liest es auch ein.

Ich danke euch allen, ich habe das erste Mal euer Forum benutzt und erlebe soviel Hilfsbereitschaft.

Es gibt glücklicherweise auch positive Überraschungen und dieses Forum zählt dazu.

VG

Wesdi

Betrifft: AW: Aus Excel TXT-Datei erstellen VBA
von: Wesdi
Geschrieben am: 04.09.2020 14:21:20

Hallo Nepumuk,

das funktioniert super, die Abstände stimmen und wird erkannt.

Aber wie kriege ich es jetzt noch hin, daß er auch mehrere Zeilen ausliest.

Ich habe da unterschiedliche Dateien, mit unterschiedlich vielen Einträgen (mal 5, aber auch mal 1000).

Das kann ich ja nicht einzeln dareinpacken. Kann ich hier einen Zähler hinkriegen der schaut in wievielen Zeilen Daten stehen und dann alle diese Zeilen ausliest und auch schreibt?

Sorry ich bin da echt nicht fit in solchen Sachen.

Ich hatte mich für die Variante on Rudi Maintaire entschieden die alle Zeilen ausliest, aber nicht rechtsbündig.

Ich habe versucht aus den Informationen beider Makros mir eins zu bauen, gelingt mir aber nicht!!!???

Hier nochmal das von Rudi:
Sub aaa()
  Dim arrColumns
  Dim lngRow As Long, lngColumn As Long
  Dim l As Integer
  Dim arrOut(0 To 3), strOut As String
  arrColumns = Array(3, 10, 50, 8)
  Open "c:\temp\Test.txt" For Output As #1
  For lngRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    For lngColumn = 0 To 3
      l = arrColumns(lngColumn)
      arrOut(lngColumn) = Left(Cells(lngRow, lngColumn + 1) & Space(l), l)
    Next
    strOut = Join(arrOut, " ")
    Print #1, strOut
  Next lngRow
  Close #1
End 
Sub 

Er benutzt hier IngRow als Zähler, aber die Kombi aus beiden Makros gelingt mir gar nicht.

Vielen Dank im voraus

VG

Wesdi


Beiträge aus dem Excel-Forum zum Thema "Aus Excel TXT-Datei erstellen VBA"