Exceldateien aus einem Verzeichnis in CSV umwandeln

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Exceldateien aus einem Verzeichnis in CSV umwandeln

    Hallo liebe VBA-Könner,

    ich habe ein Problem und schon versucht, dieses mittels vorhandener Beiträge in diesem Forum, oder auch über Google zu lösen. Leider habe ich keine Lösung gefunden, daher bitte ich drum, ob ich hier vielleicht ein Script, das ich in Excel einbinde bekommen kann.

    Mein Problem ist folgendes:

    ich habe in einem Verzeichnis eine große Anzahl von Excel-Dateien (insgesamt handelt es sich um ca. 15.000 Dateien im Format xls und xlsx [unterschiedliche Ordner, aber kopierbar]), die in das Format CSV umgewandelt werden müssen.

    Dabei soll der Export ab Zeile 7 beginnen und nur die Spalten: A,B und XE beinhalten.

    Ich habe zwar schon Scripte gefunden, die aber vermutlich alle auf einer anderen VBA-Code basieren (laufen alle nicht) und auch nicht die Möglichkeit boten, die gewünschten Bereiche anzugeben.

    Meine Excel-Version ist 2010

    Ich hoffe, ich finde hier Hilfe und danke schon mal vorab

    Beste Grüße

    Reiner
    So in etwa:

    Visual Basic-Quellcode

    1. Application.SheetsInNewWorkbook = 1
    2. Set FS=CreateObject("Scripting.FileSystemObject")
    3. Set Folder = FS.GetFolder ("C:\Temp")
    4. For Each File In Folder.Files
    5. If File.Name Like "*.xls*" Then
    6. Set wb = Workbooks.Open (File.Path, ReadOnly:=True, UpdateLinks:=False)
    7. Set wb2 = Workbooks.Add
    8. wb.Sheets(1).Range("A:B;XE").Copy wb2.Sheets(1).Range("A1")
    9. wb2.SaveAs wb.FullPath & ".csv", FileFormat:=xlCSV
    10. wb2.Close False
    11. wb.Close False
    12. End If
    13. Next
    Ist nicht getestet, sollte aber als Grundlage für deine Versuche reichen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Geht leider nicht

    Hallo Petaod,

    danke für Deine Antwort. Leider funktioniert das Script nicht. Ich bekomme folgende Meldung:

    Laufzeitfehler 1004, der sich auf unten stehende Zeile bezieht:


    wb.Sheets(1).Range("A:B;XE").Copy wb2.Sheets(1).Range("A1")



    Als Ausgabe bekomme ich nur eine leere Arbeitsmappe. Ich habe obige Zeile um den Befehl PASTE erweitert, damit nicht nur kopiert, sondern auch eingefügt wird, hat aber leider nicht geklappt. Nun bin ich allerdings auch nicht der Crack in Sachen VBA.

    Muss nicht auch noch in den Zeilen

    wb2.Close False
    wb.Close False


    das Schließen auf TRUE gesetzt werden?

    Gruß

    Reiner
    Deswegen sagte ich
    sollte aber als Grundlage für deine Versuche reichen
    Ich habe hier jetzt kein Excel zum Testen.
    Wahrscheinlich heißt es eben Range("A:B,XE")

    Ich habe obige Zeile um den Befehl PASTE erweitert, damit nicht nur kopiert, sondern auch eingefügt wird
    Das ist Blödsinn.
    Damit geht's über den PasteBuffer. Das ist eine gefährliche Aktion, weil der systemweit verändert werden kann!
    Dem Copy kannst du eine direkte Destination gleich mitgeben, was ich getan habe.

    das Schließen auf TRUE gesetzt werden?
    Wozu?
    True speichert die Workbooks im Excel-Format, was unnötig ist.
    Die Inputdatei musst du nicht speichern und die Outputdatei hast du schon als CSV gespeichert.

    Ich möchte dir jetzt nicht das komplette Excel-Objektmodell vorkauen.
    Schau einfach in der Hilfe nach, wie die einzelnen Objekte und Methoden funktionieren.

    Du sollst ja auch was draus lernen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dann vielen Dank

    Tja, dann vielen Dank für Deine Hilfe.

    Ich habe leider das Problem, dass mir jegliche Affinität zur Programmierung fehlt. Ich bin seit mehr als 20 Jahren in der EDV tätig und mir ist bislang keine Software untergekommen, die ich nicht innerhalb kürzester Zeit beherrsche, oder unterrichten kann. Nur, VBA geht völlig an mir vorbei und will einfach nicht in meinen Kopf.

    Ich habe es übrigens probiert mit der Änderung in ein Komma/Semikolon,Punkt, erhalte jedoch immer das gleiche Ergebnis:

    Laufzeitfehler 1004
    Anwendungs- oder objektdefinierter Fehler

    und anschließend ist genannte Zeile gelb markiert.

    Ich will damit nicht unhöflich sein, aber es hat seinen Grund, weshalb ich frage.

    Nochmals Danke und Gruß

    Reiner

    Noch eine Ergänzung:

    kann es daran liegen, dass ich das Script in den VBA-Editor von Excel einfüge (Alt-F11 und neues Modul) und dann das ganze zwischen Sub und End Sub einfüge?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „reinerp_2001“ ()

    Ich habe es übrigens probiert mit der Änderung in ein Komma/Semikolon,Punkt, erhalte jedoch immer das gleiche Ergebnis:


    Ich hab's mal auf 2 Zeilen verteilt.
    Allerdings kamen dann Fehlermeldungen beim Speichern.

    Hier eine geänderte Version:

    Visual Basic-Quellcode

    1. Sub test()
    2. Dim csvPfad As String
    3. Dim csvDatei As String
    4. csvPfad = "c:\csvdateien\" '<- Pfad für csv-Dateien '\' am Ende!
    5. Application.SheetsInNewWorkbook = 1
    6. Set FS = CreateObject("Scripting.FileSystemObject")
    7. Set Folder = FS.GetFolder("C:\dateien")
    8. For Each file In Folder.Files
    9. If file.Name Like "*.xls*" Then
    10. csvDatei = Left$(file.Name, InStr(file.Name, ".") - 1) & ".csv"
    11. Set wb = Workbooks.Open(file.Path, ReadOnly:=True, UpdateLinks:=False)
    12. Set wb2 = Workbooks.Add
    13. wb.Sheets(1).Range("A:B").Copy wb2.Sheets(1).Range("A1")
    14. wb.Sheets(1).Range("XE:XE").Copy wb2.Sheets(1).Range("C1")
    15. wb2.SaveAs csvPfad & csvDatei, FileFormat:=xlCSV
    16. wb2.Close False
    17. wb.Close False
    18. End If
    19. Next
    20. End Sub
    Möglich, dass die Fehlermeldung kommt, wenn die Quelle aus einem älteren Excel mit maximal ~65000 Zeilen stammt und die Daten in das neue Format eingefügt werden sollen. Da könnte es helfen, die tatsächlich benutzen Zeilen noch mit anzugeben.

    Edit: Ich suche bei Dateinamen den Punkt immer von hinten, sonst bricht er beim ersten gefundenen Punkt ab, was zu doppelten Dateinamen führen kann.
    Gruß
    Peterfido

    Keine Unterstützung per PN!