2017-07-11 3 views
0

Dies geht weiter von einer vorherigen Frage, die ich tatsächlich gestellt habe. Ich bin verzweifelt, einen Weg zu finden, die abschließenden leeren Zeilen von den Textdateien zu entfernen, wenn sie von einer Excel-Datei erzeugt werden, zu der ich bis jetzt nicht erfolgreich war. Ich habe den folgenden Code gerade gefunden und wenn ich ihn ausführe, kann ich sehen, dass er die Grundlage für das hat, was ich will (ich denke), aber ich habe nicht die Fähigkeit, ihn zu ändern, sodass jede Zeile mit Daten darin ignoriert wird und löscht nur die Leerzeichen. Kann jemand mir helfen, dieses zu ändern, damit es diese lästigen weißen Räume bitte löschen kann?Entfernen von Leerzeilen aus einer Textdatei mit VBA

Sub AltText() 
    Dim File As String 
    Dim VecFile() As String, Aux As String 
    Dim i As Long, j As Long 
    Dim SizeNewFile As Long 

    File = Application.GetOpenFilename 

    'Import file lines to array excluding first 3 lines and 
    'lines starting with "-" 
    Open File For Input As 1 
    i = 0 
    j = 0 
    Do Until EOF(1) 
    j = j + 1 
    Line Input #1, Aux 
    If j > 3 And InStr(1, Aux, "-") <> 1 Then 
     i = i + 1 
     ReDim Preserve VecFile(1 To i) 
     VecFile(i) = Aux 
    End If 
    Loop 
    Close #1 
    SizeNewFile = i 

    'Write array to file 
    Open File For Output As 1 
    For i = 1 To SizeNewFile 
    Print #1, VecFile(i) 
    Next i 
    Close #1 

    MsgBox "File alteration completed!" 

End Sub 
+0

So importieren Sie eine Datei, und möchten nur die Leerzeichen nach dem Text entfernen? Haben Sie nur ['TRIM()'] (https://www.techonthenet.com/excel/formulas/trim.php) ausprobiert? – BruceWayne

+0

Das ist, was ich versucht habe zu tun, aber ohne viel Erfolg, ich bin immer noch in den Griff, wie es funktioniert tbh – Dyhouse

Antwort

2

Um Zeilen zu entfernen, die leer sind, versuchen Sie den folgenden Code:

Sub AltText() 
    Dim inFile As String 
    Dim outFile As String 
    Dim data As String 

    inFile = Application.GetOpenFilename 
    Open inFile For Input As #1 

    outFile = inFile & ".alt" 
    Open outFile For Output As #2 

    Do Until EOF(1) 
     Line Input #1, data 

     If Trim(data) <> "" Then 
     Print #2, data 
     End If 
    Loop 

    Close #1 
    Close #2 

    Kill inFile 
    Name outFile As inFile 

    MsgBox "File alteration completed!" 
End Sub 
+0

Das funktioniert perfekt außer dem ".alt" -Teil, den ich durch ".txt" ersetzt habe, da er in einem Dateiformat gespeichert wurde, das nicht erkannt wurde. Meine einzige Frage wäre, dass es mit .txt im Dateinamen speichert, gibt es eine Möglichkeit, es auszuführen, so dass es den Dateinamen gleich dem was geöffnet hat? ZB die ursprüngliche Datei überschreiben? – Dyhouse

+0

Ich habe den Code geändert, um diese Anforderung zu erfüllen. Im Grunde benennen Sie einfach die Datei um. –

+0

Vielen Dank Brian - das hat absolut perfekt funktioniert. Ich habe mir ernsthaft die Haare ausgezogen. Danke nochmal! – Dyhouse

0

Sie müssen für Leerzeichen und Wagenrücklauf Zeichen suchen, so, nachdem Sie die Zeile lesen, überprüfen für den Inhalt:

dim temp as string 

temp = Replace (aux, chr(10), "") 
temp = Replace (temp,chr(13),"") 
temp = Rtrim(Ltrim(temp)) ' remove just blank stuff 

jetzt die Länge überprüfen:

if j > 3 and Len(temp) <> 0 then 
    ...... 
    add the lines 

Ihr Code sollte also so aussehen:

Sub AltText() 
    Dim File As String 
    Dim VecFile() As String, Aux As String 
    Dim i As Long, j As Long 
    Dim SizeNewFile As Long 

    File = Application.GetOpenFilename 

    'Import file lines to array excluding first 3 lines and 
    'lines starting with "-" 
    Open File For Input As 1 
    i = 0 
    j = 0 
    Do Until EOF(1) 
    j = j + 1 
    Line Input #1, Aux 

    '===== 
    dim temp as string 

    temp = Replace (aux, chr(10), "") 
    temp = Replace (temp,chr(13),"") 
    temp = Rtrim(Ltrim(temp)) ' remove just blank stuff 
    '====== 

    If j > 3 And Len(temp) <> 0 Then 
     i = i + 1 
     ReDim Preserve VecFile(1 To i) 
     VecFile(i) = Aux 
    End If 
    Loop 
    Close #1 
    SizeNewFile = i 

    'Write array to file 
    Open File For Output As 1 
    For i = 1 To SizeNewFile 
    Print #1, VecFile(i) 
    Next i 
    Close #1 

    MsgBox "File alteration completed!" 

End Sub 
+0

Vielen Dank für Ihre Antwort. Wenn ich dies versuche und ausführe, bekomme ich sofort einen Kompilierfehler "sub oder function nicht definiert" und es wird 'char' hervorgehoben. Wie würdest du das definieren? – Dyhouse

+0

Mein Fehler, benutze chr anstelle von char - ich mache das immer ... – iDebug

Verwandte Themen