Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: mit VBA/VBS Textdateien bearbeiten ?

mit VBA/VBS Textdateien bearbeiten ?
Mandy
Hallo,
habe mal ne andere Frage:
Ich habe im Moment ein Schlag voll Textdateien (ein paar Hundert). Alle Textdateien sind gleich Strukturiert.
Es gibt ein Vorspann,
ein Inhalt und
ein Nachspann
Ich müsste nun jedes File aufmachen, alles bis auf den INHALT Löschen und wieder schliessen. :-(((
Blödes GEschäft.
Da kam mir die Idee, ob das nicht viellecht mit VBA geht.
Kann man mit VBA auf ein Verzeichnis zugreifen, dort nacheinander, einzeln eine Textdatei aufmachen, alles Löschen, was bis "HIER IST DER VORSPANN ZU ENDE" geht und alles löschen, was nach "HIER BIGINNT DER NACHSPANN" kommt, dann Datei wieder zu ?
Falls ja, und jemand hatt ein Beispiel, würde ich mich sehr freuen.
Danke
Mandy
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: mit VBA/VBS Textdateien bearbeiten ?
19.08.2011 14:37:23
ransi
HAllo Mandy
Versuchs mal mit diesem kleinen Code:
Option Explicit

Const Verzeichnis = "C:\Users\Quarantaene" 'Anpassen
Const strStart As String = "HIER IST DER VORSPANN ZU ENDE"
Const strEnde As String = "HIER BIGINNT DER NACHSPANN"

Public Sub machs()
    Dim FSO As Object
    Dim DAtei, txtDatei As Object, strTmp As String
    Dim arr As Variant
    Set FSO = CreateObject("Scripting.FilesystemObject")
    
    For Each DAtei In FSO.getfolder(Verzeichnis).Files
        If LCase(FSO.getextensionname(DAtei)) = "txt" Then
            Set txtDatei = FSO.opentextfile(DAtei)
            strTmp = txtDatei.readall
            txtDatei.Close
            strTmp = Replace(strTmp, strStart, "#####")
            strTmp = Replace(strTmp, strEnde, "#####")
            arr = Split(strTmp, "#####")
            If UBound(arr) > 0 Then
                Set txtDatei = FSO.createtextfile(DAtei, True)
                txtDatei.write (arr(1))
                txtDatei.Close
            End If
        End If
    Next
    
    
    
End Sub


Kopier die Dateien aber erstmal in einen anderen Ordner und teste an den Kopien.
ransi
Anzeige
AW: mit VBA/VBS Textdateien bearbeiten ?
19.08.2011 15:17:05
Tino
Hallo,
hier noch eine Variante.
Im Code gehe ich mal davon aus das sich die Excel-Datei mit dem Code im Ordner der Textdatei befindet,
wenn dies nicht so ist müsstest Du den Pfad anpassen. (siehe Kommentare)
Am Ende wird in der Tabelle1 noch ausgegeben ob die Zeilen im Text gefunden wurden. (ok. oder Fehler!)
Mach von den Textdateien zuerst eine Sicherung, sollte es mit dem Code nicht gehen ist nichts verloren.
Option Explicit

Sub Beispiel()
Dim F%, CountLen%
Dim strPath$, strDir$, sLines$, varInfo(), sInfo$
Dim ArrayFile()
Dim n&, nn&, nStart&, nLaenge&

Const TeilAbPos$ = "HIER IST DER VORSPANN ZU ENDE"
Const TeilBisPos$ = "HIER BIGINNT DER NACHSPANN"

'evtl. Pfad anpassen wo sich die Textdateien befinden 
'hier sind diese auch diese Excel-Datei liegt 
strPath = ThisWorkbook.Path

If Right$(strPath, 1) <> "\" Then strPath = strPath & "\"

'*.txt- Dateien im Ordner suchen u. sammeln 
strDir = Dir$(strPath & "*.txt", vbNormal)
Do While strDir <> ""
    Redim Preserve ArrayFile(n)
    ArrayFile(n) = strPath & strDir
    n = n + 1
    strDir = Dir$()
Loop

If n > 0 Then
    CountLen = Len(strPath) + 1
    Redim varInfo(1 To n, 1 To 2)
    For n = Lbound(ArrayFile) To Ubound(ArrayFile)
        sInfo = "Fehler!" 'Fehler ist, Start oder Ende nicht gefunden 
        
        'Datei einlesen 
        F = FreeFile
        Open ArrayFile(n) For Binary As #F
        sLines = Space$(LOF(F))
        Get #F, , sLines
        Close
        
        'Text ausschneiden u. zurückschreiben 
        nStart = InStr(sLines, TeilAbPos)
        nLaenge = InStr(sLines, TeilBisPos) - 2
        If nStart > 0 And nLaenge > 0 Then
            nStart = nStart + Len(TeilAbPos) + 1
            nLaenge = nLaenge - nStart
            sLines = Trim$(Mid$(sLines, nStart, nLaenge))
            
            Open ArrayFile(n) For Output As #F
            Print #F, sLines
            Close #F
            
            sInfo = "ok."
        End If
        
        'Infos sammeln 
        varInfo(n + 1, 1) = Mid$(ArrayFile(n), CountLen, Len(ArrayFile(n)))
        varInfo(n + 1, 2) = sInfo
        sLines = ""
    Next n
    
    'Info in einer Tabelle ausgeben 
    With Tabelle1 'evtl. Tabelle anpassen 
        .Range("A:B").Delete 'Spalten löschen 
        .Cells(1, 1) = "Dateiname" 'Überschrift 
        .Cells(1, 2) = "Info" 'Überschrift 
        .Rows(1).Font.Bold = True 'Überschrift fett 
        'Ausgabe in Zelle 
        .Cells(2, 1).Resize(Ubound(varInfo), Ubound(varInfo, 2)) = varInfo
        .Range("A:B").EntireColumn.AutoFit
    End With
Else
    'Fehler keine Textdatei im Ordner 
    MsgBox "keine Textdatei gefunden!", vbExclamation
End If

End Sub
Gruß Tino
Anzeige
Super ihr 2, vielen Dank ,klappt owT
19.08.2011 22:43:49
Mandy
;
Anzeige
Anzeige

Infobox / Tutorial

Textdateien mit VBA/VBS bearbeiten


Schritt-für-Schritt-Anleitung

Um Textdateien mit VBA oder VBS zu bearbeiten, kannst Du den folgenden Code verwenden. Dieser Code öffnet jede Textdatei in einem angegebenen Verzeichnis, löscht den Vorspann und den Nachspann und speichert nur den Inhalt.

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.
  2. Modul einfügen: Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsx) > Einfügen > Modul.
  3. Code einfügen: Füge den folgenden Code in das Modul ein:

    Option Explicit
    
    Const Verzeichnis = "C:\Users\Quarantaene" 'Anpassen
    Const strStart As String = "HIER IST DER VORSPANN ZU ENDE"
    Const strEnde As String = "HIER BIGINNT DER NACHSPANN"
    
    Public Sub machs()
       Dim FSO As Object
       Dim DAtei, txtDatei As Object, strTmp As String
       Dim arr As Variant
       Set FSO = CreateObject("Scripting.FilesystemObject")
    
       For Each DAtei In FSO.getfolder(Verzeichnis).Files
           If LCase(FSO.getextensionname(DAtei)) = "txt" Then
               Set txtDatei = FSO.opentextfile(DAtei)
               strTmp = txtDatei.readall
               txtDatei.Close
               strTmp = Replace(strTmp, strStart, "#####")
               strTmp = Replace(strTmp, strEnde, "#####")
               arr = Split(strTmp, "#####")
               If UBound(arr) > 0 Then
                   Set txtDatei = FSO.createtextfile(DAtei, True)
                   txtDatei.write (arr(1))
                   txtDatei.Close
               End If
           End If
       Next
    End Sub
  4. Code ausführen: Führe den Code durch Drücken von F5 aus. Achte darauf, dass Du eine Sicherungskopie Deiner Dateien machst.

Häufige Fehler und Lösungen

  • Fehler: "Keine Textdatei gefunden!"
    Lösung: Stelle sicher, dass der angegebene Verzeichnis-Pfad korrekt ist und dass sich dort tatsächlich .txt-Dateien befinden.

  • Fehler: "Laufzeitfehler 53: Datei nicht gefunden"
    Lösung: Überprüfe, ob die Dateien im angegebenen Verzeichnis existieren und dass der Pfad korrekt ist.


Alternative Methoden

Wenn Du nicht mit VBA arbeiten möchtest, kannst Du auch VBScript verwenden. Hier ist ein einfacher VBS-Code, der das gleiche Ziel erreicht:

Dim FSO, folder, file, text, start, finish
Set FSO = CreateObject("Scripting.FileSystemObject")
folder = "C:\Users\Quarantaene"
start = "HIER IST DER VORSPANN ZU ENDE"
finish = "HIER BIGINNT DER NACHSPANN"

For Each file In FSO.GetFolder(folder).Files
    If LCase(FSO.GetExtensionName(file)) = "txt" Then
        Set txtFile = FSO.OpenTextFile(file, 1)
        text = txtFile.ReadAll
        txtFile.Close
        text = Split(text, start)(1)
        text = Split(text, finish)(0)
        Set txtFile = FSO.CreateTextFile(file, True)
        txtFile.Write text
        txtFile.Close
    End If
Next

Praktische Beispiele

  1. Dateien in einem bestimmten Ordner: Stelle sicher, dass alle .txt-Dateien in einem spezifischen Ordner vorhanden sind, bevor Du den Code ausführst.
  2. Anpassung des Codes: Du kannst den Verzeichnis-Pfad und die Suchbegriffe anpassen, um den Code an Deine Bedürfnisse anzupassen.

Tipps für Profis

  • Backup erstellen: Bevor Du mit dem Bearbeiten von Textdateien beginnst, erstelle immer ein Backup, um Datenverlust zu vermeiden.
  • Testen: Teste den Code zuerst mit einer kleinen Anzahl von Dateien, bevor Du ihn auf alle anwendest.
  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen in Deinen Code ein, um unerwartete Fehler besser zu handhaben.

FAQ: Häufige Fragen

1. Kann ich den Code anpassen, um andere Dateitypen zu bearbeiten?
Ja, Du kannst den Code anpassen, indem Du die Dateiendung von "txt" auf die gewünschte Endung änderst.

2. Ist VBA in allen Excel-Versionen verfügbar?
Ja, VBA ist in den meisten Excel-Versionen verfügbar, jedoch kann die Unterstützung für bestimmte Funktionen je nach Version variieren.

3. Wie kann ich den Code schneller machen?
Vermeide unnötige FileSystemObject-Operationen und optimiere die Schleifen, um die Ausführungsgeschwindigkeit zu erhöhen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige