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

verketten - Leerzeichen - export txt-datei VBA

verketten - Leerzeichen - export txt-datei VBA
May
Hallo VBA-Profis,
ich habe folgendes Problem. In meiner Tabelle "Übersicht" die wie folgt aufgebaut ist:
A B C D E .... AU
Spaltenüberschrift SNR SATZART SYS MUSTER .... TEXT1
2 x-Adresse Start 1 22 24 28 601
3 x-Adresse Ende 21 23 27 31 1000
4 x-Adresse von - bis 1-21 22-23 24-27 28-31 601-1000
5 x-Adresse Länge 21 2 4 4 400
stehen im Bereich (B6:AU999) meine Werte:
6 A1234 01 xyz 0123 test
7 Y12 01 yxzw 0123 test-test
8 Z12398 01 x 4321 test-test-test-test
9 X0008 01 qwet 518 test
... .... ... ... .... ....
999 B1234889 01 yxzw 518 test
Ich würde gerne per VBA-Makro, die Information die in den jeweiligen (B6:AU6), (B7:AU7),...,(B999:AU999) also datensatzweise in einen String pro Zeile (z.B. Zeile 6: A1234 01xyz 0123test) verketten. Hierbei soll aber nicht nur verkettet werden, sondern vielmehr immer die jeweilige erlaubte Länge pro Spalte (siehe Excel-Zeile 5) berücksichtigt werden. D.h. für Zelle B6 gesprochen ist die Information 5 Zeichen lang, die Maximallänge laut Zelle B5 für diese Spalte ist jedoch 21 Zeiche, d.h. es sind noch 16 Leerzeichen anzuhängen um auf die Maximallänge zu erhalten. Für jede Zelleninhalt im Bereich B6:AU999 ist also der jeweilige Wert, mit dem jeweiligen Feldlängenwert in der Zeile 5 zu vergleichen und evt. Leerzellen einzubinden. Das Non-Plus-Ultra wäre dann noch wenn das Ergebnis, sprich die "Strings" in eine txt-Datei mit fester Breite exportiert werden können.
Hintergrund ist, das testdaten für eine Schnittstelle erzeugt werden sollen. Der gesamte String pro Datensatz hat eine Länge von 1.000 Zeichen und wir sequentiell von der Schnittstelle aus der TXT-Datei gelesen.
Ich hoffe meine Erläuterungen von oben sind verständlich genug. Kann mir einer hierbei helfen?
Ich bin für jeden Input dankbar!
VG
M.May

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: verketten - Leerzeichen - export txt-datei VBA
16.12.2009 17:19:48
Tino
Hallo,
kannst Du nicht ein Beispiel hochladen, irgendwie komme ich mit Deinem Muster nicht zurecht.
Gruß Tino
habe verstanden, glaube ich...
16.12.2009 17:51:53
Tino
Hallo,
hier mal was zum testen.
Sub Verketten()
Dim meAr(), meArLen()
Dim A&, AA&
Dim strString$, tmpString$, strZiel$
Dim F%

'Anhand der Spalte 2 wird die letzte gefüllte Zeile ermittelt 
'muss eventuell angepasst werden 
With Sheets("Tabelle1") 'Tabellennamen anpassen 
 'Datenbereich 
 meAr = .Range("B6", .Cells(.Rows.Count, 2).End(xlUp).Offset(0, 45)).Value2
 'Bereich mit der Feldlänge 
 meArLen = .Range("B5:AU5").Value2
End With

For A = 1 To Ubound(meAr)
    For AA = 1 To Ubound(meAr, 2)
      strString = strString & meAr(A, AA) & String(meArLen(1, AA) - Len(meAr(A, AA)), " ")
    Next AA
    strString = strString & vbCrLf
Next A

strString = Left$(strString, Len(strString) - 1)

If InStr(ThisWorkbook.Path, ":\") > 0 Then
 ChDrive Left$(ThisWorkbook.Path, 2)
 ChDir ThisWorkbook.Path
End If

strZiel = Application.GetSaveAsFilename("Mein Textfile", "Textdateien (*.txt), *.txt")

If strZiel <> CStr(False) Then
  F = FreeFile
  Open strZiel For Output As #F
  Print #F, strString
  Close #F
End If

End Sub
Gruß Tino
Anzeige
habe noch etwas getestet, geht auch schneller...
16.12.2009 20:48:09
Tino
Hallo,
wenn man direkt Zeile für Zeile in die Textdatei schreibt, gehts um einiges schneller.
Sub Verketten()
Dim meAr(), meArLen()
Dim A&, AA&, LWert&
Dim strString$, strZiel$
Dim F%

If InStr(ThisWorkbook.Path, ":\") > 0 Then
 ChDrive Left$(ThisWorkbook.Path, 2)
 ChDir ThisWorkbook.Path
End If

strZiel = Application.GetSaveAsFilename("Mein Textfile", "Textdateien (*.txt), *.txt")

If strZiel <> CStr(False) Then
    
    If Dir(strZiel) <> "" Then
     If MsgBox("Die Datei ist bereits vorhanden, diese löschen?", vbYesNo) = vbYes Then
        Kill strZiel
     Else
        MsgBox "Vorgang abgebrochen!", vbInformation
        Exit Sub
     End If
    End If

    'Anhand der Spalte 2 wird die letzte gefüllte Zeile ermittelt 
    'muss eventuell angepasst werden 
    With Sheets("Tabelle1") 'Tabellennamen anpassen 
     'Datenbereich 
     meAr = .Range("B6", .Cells(.Rows.Count, 2).End(xlUp).Offset(0, 45)).Value2
     'Bereich mit der Feldlänge 
     meArLen = .Range("B5:AU5").Value2
    End With
    
    F = FreeFile
    Open strZiel For Append As #F

    For A = 1 To Ubound(meAr)
        For AA = 1 To Ubound(meAr, 2)
          strString = strString & meAr(A, AA) & Space$(meArLen(1, AA) - Len(meAr(A, AA)))
        Next AA
        Print #F, strString
        strString = ""
    Next A
  
    Close #F

End If


End Sub
Gruß Tino
Anzeige
AW: habe noch etwas getestet, geht auch schneller...
17.12.2009 13:40:13
May
Hallo Tino,
vielen lieben Dank für die schnelle Lösung. Die 2. Version funktioniert einwandfrei. Bei der 1. Version kommt es zu einem Fehler (Laufzeitfehler '13, Typen unverträglich). Beim Debuggen hält Excel bei der Zeile "strString = strString & meAr(A, AA) & String(meArLen(1, AA) - Len(meAr(A, AA)), " ")".
Die Version 1 ist aber auch schon eine große Hilfe! Nochmals vielen Dank!
Mfg
May

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige