Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

verketten - Leerzeichen - export txt-datei VBA | Herbers Excel-Forum


Betrifft: verketten - Leerzeichen - export txt-datei VBA von: May
Geschrieben am: 16.12.2009 16:47:04

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

  

Betrifft: AW: verketten - Leerzeichen - export txt-datei VBA von: Tino
Geschrieben am: 16.12.2009 17:19:48

Hallo,
kannst Du nicht ein Beispiel hochladen, irgendwie komme ich mit Deinem Muster nicht zurecht.

Gruß Tino


  

Betrifft: habe verstanden, glaube ich... von: Tino
Geschrieben am: 16.12.2009 17:51:53

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


  

Betrifft: habe noch etwas getestet, geht auch schneller... von: Tino
Geschrieben am: 16.12.2009 20:48:09

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


  

Betrifft: AW: habe noch etwas getestet, geht auch schneller... von: May
Geschrieben am: 17.12.2009 13:40:13

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


Beiträge aus den Excel-Beispielen zum Thema "verketten - Leerzeichen - export txt-datei VBA"